Golang language specification states:
任何其他类型T的方法集由接收器类型
T
的所有方法组成。相应指针类型*T
的方法集是具有接收方*T
或T
的所有方法的集合(即,它还包含T
的方法集)。
这是为什么?为什么接收T
的方法属于*T
的方法集但反之亦然?
答案 0 :(得分:6)
来自FAQ:
如果接口值包含指针* T,则方法调用可以通过取消引用指针来获取值,但是如果接口值包含值T,则方法调用没有用于获取指针的有用方法。 / p>
顺便说一句,带指针接收器的方法可以改变它的接收器,就像它可以改变指针参数一样。将非指针接收器作为指针接收器(假设这是可能的),允许该方法改变它,而不应该改变它。
建议对所有类型的方法使用一种一致的接收器类型,并避免混合指针和直接接收器。还建议对大型类型使用指针接收器。