【发布时间】:2012-05-27 05:08:46
【问题描述】:
Golang language specification states:
任何其他类型 T 的方法集由接收器类型为
T的所有方法组成。对应指针类型*T的方法集是所有接收者为*T或T的方法的集合(即它还包含T的方法集)。
这是为什么?为什么接收T的方法属于*T设置的方法,反之不属于?
【问题讨论】:
标签: methods interface go receiver
Golang language specification states:
任何其他类型 T 的方法集由接收器类型为
T的所有方法组成。对应指针类型*T的方法集是所有接收者为*T或T的方法的集合(即它还包含T的方法集)。
这是为什么?为什么接收T的方法属于*T设置的方法,反之不属于?
【问题讨论】:
标签: methods interface go receiver
来自FAQ:
如果接口值包含指针*T,则方法调用可以通过解引用指针来获取值,但如果接口值包含值T,则方法调用没有获得指针的有用方法。
顺便说一句,带有指针接收器的方法可以改变它的接收器,就像它可以改变一个指针参数一样。将非指针接收器作为指针接收器传递(假设这是可能的),允许方法更改它,这不应该。
建议对一个类型的所有方法使用一种一致的接收器类型,避免混合指针和直接接收器。大类型也推荐使用指针接收器。
【讨论】: