为什么我的struct中的变量不能保持其值?

时间:2016-04-04 04:51:13

标签: go

如果我有:

type Foo struct {
  bar int
}

在Foo上定义的方法(注意它不是* Foo,只是Foo):

func (self Foo)incrementBar() {
  self.bar++
}

为什么在制作Foo并调用该方法两次之后:

myFoo := Foo{}
myFoo.incrementBar()
myFoo.incrementBar()
每次myFoo调用它时,

在incrementBar方法中仍为0吗?即它永远不会达到2,每次调用incrementBar时它都会对值0进行++操作。

1 个答案:

答案 0 :(得分:5)

您应该使用指针方法接收器,因为您正在改变内部变量。 当您为incrementBar使用非指针方法接收器时,会复制Foo的实例并将其传递给incrementBar。在self中更改incrementBar不会更改myFoo的值,因为它只是副本。

这是一篇关于这个问题的好文章: http://nathanleclaire.com/blog/2014/08/09/dont-get-bitten-by-pointer-vs-non-pointer-method-receivers-in-golang/