パニック

パニック #

エラー発生時にプログラムを強制終了する #

Go 言語では予期せぬエラーや対処不可能なエラーが発生した際に panic を使ってプログラムを強制終了させる。

panic を使うとそこでプログラムが停止し panic 以後のコードは実行されない。

package main

func main() {
	panic("panic 1")

	// これは実行されない
	panic("panic 2")
}
play_circleRun open_in_newRun In The Playground

発生したパニックを捕捉する #

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")
}
play_circleRun open_in_newRun In The Playground