Goでのレシーバーとnilの関係 / Receiver and nil relationship in Go

Goでのレシーバーとnilの関係 / Receiver and nil relationship in Go

7c1f67bb0859074c9458262d08eb2153?s=128

Kentaro Kawano

July 26, 2019
Tweet

Transcript

  1. Goでのレシーバとnilの関係 2019-07-26 Umeda.go 2019 Summer Kentaro Kawano

  2. レシーバとは • メソッド呼び出しの対象 • 値レシーバ • ポインタレシーバ

  3. None
  4. レシーバがnilのメソッド呼び出しはpanicになる?

  5. None
  6. 必ずpanicになるとは限らない レシーバがnilのメソッド呼び出しはpanicになる?

  7. メソッド式 • RecieverType.MethodName での呼び出しが可能 • user.SayHi() は (*User).SayHi(user) と同じ •

    レシーバはメソッド式の第⼀引数になる
  8. None
  9. どんな時にpanicする?

  10. 間接参照するとき • ポインタ型の変数(値はnil)に対して • フィールドを参照するとき • 値レシーバが必要なメソッドを呼び出すとき • 変数はレシーバの型に応じて⾃動的に型が変換される

  11. None
  12. None
  13. ダメな実装例

  14. None
  15. ⼤事なところではnilチェックをちゃんとしよう

  16. まとめ • レシーバには値レシーバとポインタレシーバがある • レシーバはメソッド式の第⼀引数 • レシーバがnilでもpanicしないケースがある • ポインタレシーバを利⽤する場合にはnilチェックする •

    すべてのメソッドでチェックする必要はない(経験則