2017-06-29 111 views
0

我有一个结构转到函数指针的问题

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

查看另一个相关的问答:[https://stackoverflow.com/questions/27775376/value-receiver-vs-pointer-receiver-in-golang](https://stackoverflow.com/questions/27775376/value-接收机-VS-指针接收器式golang) – putu

回答

0

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