如果我有:
type Foo struct {
bar int
}
还有一个定义在 Foo 上的方法(注意它不是 *Foo,只是 Foo):
func (self Foo)incrementBar() {
self.bar++
}
为什么在生成 Foo 并调用该方法两次之后:
myFoo := Foo{}
myFoo.incrementBar()
myFoo.incrementBar()
每次 myFoo 调用时,incrementBar 方法中的 bar 是否仍然为 0?即它永远不会达到 2,每次我调用 incrementBar 它都会对值 0 执行++ 操作。
最佳答案
您应该使用指针方法接收器,因为您要更改内部变量。
当您为 incrementBar
使用非指针方法接收器时,Foo
的一个实例被复制并传递给 incrementBar
。改变 incrementBar
中的 self
不会改变 myFoo
的值,因为它只是一个副本。
这是一篇关于这个问题的好文章: http://nathanleclaire.com/blog/2014/08/09/dont-get-bitten-by-pointer-vs-non-pointer-method-receivers-in-golang/
关于go - 为什么我的结构中的变量不保持其值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36394778/