2017-06-29 72 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中,方法只是一個接收類型實例的函數。如果你的函數接收一個實例作爲一個值,那麼這個值本質上就是該實例的一個副本,它將在你的函數中是本地的,並且你對該實例所做的任何變化都不會對原始實例進行。如果你的函數收到一個指向實例的指針,那麼你所做的任何突變都將直接完成到原始實例。