パニック #
エラー発生時にプログラムを強制終了する #
Go 言語では予期せぬエラーや対処不可能なエラーが発生した際に panic を使ってプログラムを強制終了させる。
panic を使うとそこでプログラムが停止し panic 以後のコードは実行されない。
package main
func main() {
panic("panic 1")
// これは実行されない
panic("panic 2")
}
発生したパニックを捕捉する #
recover
を使うと発生したパニックを捕捉してプログラムの強制終了を免れられる。
下記のコードにある dever
はプログラムの終了時に呼び出す関数を指定するもので、panic でプログラムが終了する間際に関数を実行し recover で panic をキャッチする。
recover は Java の catch に似ているが、Java の例外のように呼び出し元で recover されることを想定して呼び出された関数が panic を起こすような使い方はしない。 エラーハンドリングは error を返り値で返す方法のみにて行われる。
package main
import (
"log"
)
func main() {
defer func() {
if r := recover(); r != nil {
log.Printf("Recovered. %v", r) // == 2009/11/10 23:00:00 Recovered. panic1
}
}()
func1()
}
func func1() {
panic("panic1")
}