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