gpt4 book ai didi

go - 为什么我的结构中的变量不保持其值?

转载 作者:IT王子 更新时间:2023-10-29 02:27:43 25 4
gpt4 key购买 nike

如果我有:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com