Goでのレシーバーとnilの関係 / Receiver and nil relationship in Go
by
Kentaro Kawano
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Goでのレシーバとnilの関係 2019-07-26 Umeda.go 2019 Summer Kentaro Kawano
Slide 2
Slide 2 text
レシーバとは • メソッド呼び出しの対象 • 値レシーバ • ポインタレシーバ
Slide 3
Slide 3 text
No content
Slide 4
Slide 4 text
レシーバがnilのメソッド呼び出しはpanicになる?
Slide 5
Slide 5 text
No content
Slide 6
Slide 6 text
必ずpanicになるとは限らない レシーバがnilのメソッド呼び出しはpanicになる?
Slide 7
Slide 7 text
メソッド式 • RecieverType.MethodName での呼び出しが可能 • user.SayHi() は (*User).SayHi(user) と同じ • レシーバはメソッド式の第⼀引数になる
Slide 8
Slide 8 text
No content
Slide 9
Slide 9 text
どんな時にpanicする?
Slide 10
Slide 10 text
間接参照するとき • ポインタ型の変数(値はnil)に対して • フィールドを参照するとき • 値レシーバが必要なメソッドを呼び出すとき • 変数はレシーバの型に応じて⾃動的に型が変換される
Slide 11
Slide 11 text
No content
Slide 12
Slide 12 text
No content
Slide 13
Slide 13 text
ダメな実装例
Slide 14
Slide 14 text
No content
Slide 15
Slide 15 text
⼤事なところではnilチェックをちゃんとしよう
Slide 16
Slide 16 text
まとめ • レシーバには値レシーバとポインタレシーバがある • レシーバはメソッド式の第⼀引数 • レシーバがnilでもpanicしないケースがある • ポインタレシーバを利⽤する場合にはnilチェックする • すべてのメソッドでチェックする必要はない(経験則