1

Golang语言规范指出

任何其他类型 T 的方法集由所有具有接收者类型的方法组成T。对应指针类型的方法*T集是所有带有receiver *Tor的方法的T集合(即也包含了的方法集T)。

为什么是这样?为什么接收的方法T属于设置的方法,*T反之不属于?

4

1 回答 1

6

常见问题解答

如果接口值包含指针*T,则方法调用可以通过解引用指针来获取值,但如果接口值包含值T,则方法调用没有获得指针的有用方法。

顺便说一句,带有指针接收器的方法可以改变它的接收器,就像它可以改变一个指针参数一样。将非指针接收器作为指针传递(假设这是可能的),允许方法更改它,这不应该。

建议对一个类型的所有方法使用一种一致的接收器类型,并避免混合指针和直接接收器。还建议对大类型使用指针接收器。

于 2012-05-20T11:02:04.463 回答