去功能指针问题

时间:2017-06-29 15:02:04

标签: pointers go

我有一个结构

type keeper struct {
    ptr int32
}

然后我添加一个函数

func(l keeper) next() {
  l.ptr++
}

但是当我创建一个新的守护者并调用next()

tester := keeper {
  ptr: 0,
}
test.next()

我似乎没有修改测试仪中的ptr值。如果我将函数更改为指针,那么它将起作用

func(l *keeper) next() {
  l.ptr++
}

为什么会这样?

1 个答案:

答案 0 :(得分:0)

在Go中,方法只是一个接收类型实例的函数。如果您的函数接收一个实例作为值,那么该值实际上是该实例的副本,该实例将是您的函数的本地实例,并且您对该实例所做的任何突变都不会对原始实例进行。如果您的函数收到指向实例的指针,那么您所做的任何突变都将直接完成到原始实例。