1
的Golang language specification states:方法设置T和* T
任何其他类型T的方法集包括与接收器类型
T
的所有方法。相应指针类型*T
的方法集合是具有接收器*T
或T
(也包含方法集合T
)的所有方法的集合。
这是为什么?为什么接收T
的方法属于为*T
设置的方法,但反之亦然?
的Golang language specification states:方法设置T和* T
任何其他类型T的方法集包括与接收器类型
T
的所有方法。相应指针类型*T
的方法集合是具有接收器*T
或T
(也包含方法集合T
)的所有方法的集合。
这是为什么?为什么接收T
的方法属于为*T
设置的方法,但反之亦然?
从FAQ:
如果接口值包含一个指针* T,方法调用可以通过解引用指针获得的值,但如果接口值包含一个值T,就没有有用方法调用获取指针的方式。
顺便说一句,指针接收器的方法可以改变它的接收器,就像它可以改变指针参数一样。将非指针接收器作为指针传递(假设这是可能的),允许该方法更改它,而不应该这样做。
建议对一种类型的所有方法使用一个一致的接收器类型,并避免混合指针和直接接收器。还建议使用大型指针接收器。
优秀的权威答案。干杯。 –