猿问

在指针上定义的方法仍然可以用值调用

“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


人到中年有点甜
浏览 203回答 2
2回答
随时随地看视频慕课网APP

相关分类

Go
我要回答