上級 › 値レシーバのメソッドは呼び出し元の値を変更しない › パターン1
値レシーバのメソッドは呼び出し元の値を変更しない
値レシーバで定義したメソッドは、レシーバのコピーに対して操作を行います。
1 package main 2 3 import "fmt" 4 5 type Counter struct{ N int } 6 7 func (c _________) Inc() { c.N++ } ^ 8 9 func main() { 10 c := Counter{N: 0} 11 c.Inc() 12 fmt.Println(c.N) 13 }
出力: 0
空欄を埋めて実行を通す
値レシーバのIncはcのコピーに対してN++を行うため、呼び出し元のcは変更されません。ポインタレシーバ(*Counter)にする必要があります。
次の問題