疑問
Goのメソッドはpointer receiverにするか、value receiverにするか
func (s *MyStruct) pointerMethod() { } // method on pointer
func (s MyStruct) valueMethod() { } // method on value
結論
メソッドでは基本的にはpoitner receiverを使うとよい
map, func, channelはreference typeなのでvalueにする必要がある
理由
公式ドキュメント
1.receiverを変更する場合はpointerとして定義する
2.receiverが大きい場合、(メモリなどの)節約のためにpointer receiverを使うとよい
3.typeに対してメソッドが複数ある場合、メソッド間でreceiverの定義を混在させないようにする
次回
mapはreference typeだからvalue receiverにするが、sliceはpointerが推奨されるのはなぜ?
Goにはreference type がないらしい
参考
Go Wiki: Go Code Review Comments - Receiver Type
Go Wiki: Go Code Review Comments - Pass Values
Go maps in action
Go: reference types as arguments
Value receiver vs. pointer receiver
Let’s Talk About Reference Types in Go
Go Reference Type: Slices vs. Maps