我有一个结构
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++
}
为什么会这样?
答案 0 :(得分:0)
在Go中,方法只是一个接收类型实例的函数。如果您的函数接收一个实例作为值,那么该值实际上是该实例的副本,该实例将是您的函数的本地实例,并且您对该实例所做的任何突变都不会对原始实例进行。如果您的函数收到指向实例的指针,那么您所做的任何突变都将直接完成到原始实例。