“Effective Go”文档说明如下。
关于接收者的指针与值的规则是值方法可以在指针和值上调用,但指针方法只能在指针上调用。
http://tip.golang.org/doc/effective_go.html#pointers_vs_values
因此,如果我定义一个如下所示的方法,它不是不能用值调用吗?
func (self *someStruct) Change(newNum int) {
self.propertyOne = newNum
}
但是,以下似乎仍然有效。
structInstance := &someStruct{
propertyOne: 41,
}
(*structInstance).Change(456)
为什么?
它是否将值转换(*structInstance)回Change调用的地址/指针?
如何确保某个类型的某些实例无法调用在指针上定义的方法(如Change)?
去游乐场演示
http://play.golang.org/p/azbpp_djlG
相关分类