どうも、スタディサプリ ENGLISHでTOIECに向けて英語学習のヨノです。スタディサプリ ENGLISH
だけでも十分なのですが、プログラマーとしての学習もしなければということで、Go Blog を読むことにしました。
英語の長文を読みつつ、Go言語に詳しくなれるので一石二鳥!!笑
せっかく読むので要点をまとめていきます。
今回は、「Defer, Panic, and Recover」
defer
defer
ポイント
defer
func a() { i := 0 defer fmt.Println(i) // => 0 i++ return }
- LIFO(Last In First Out)で実行される
named return value
のfunc c() (i int) { defer func() { i++ }() return 1 // deferで+1されるので「2」が返る }
panic
は通常の制御フローを停止して、panickingを開始する組み込み関数。
- 関数Fが
panic
を呼び出したとき、関数Fの実行を停止し、関数F内でdefer
に渡した関数(遅延関数)が実行される。 - Fは呼び出し元に戻る。
- プロセスは現在のゴルーチン内のすべての関数が戻るまでスタックを上っていき、すべて戻るとプログラムはクラッシュ。
パニックはpanic
recover
recover
はパニックしたゴルーチン制御を回復する関数。
ポイント
recover
はdeferに渡す関数内でのみ使える- 正常実行の間は、
recover
はnil
encodeState
のerror
とmarshal
メソッドで使われている。
panic
を使う場合でも、外部APIでは明示的なエラーを返すのがGoライブラリの慣習(規則)。
おすすめ図書
Tour of Goを終えた人にオススメです!!