組み込み関数 panic
は、エラーメッセージを表示して、プログラムを中断する。何か致命的なエラーが起こった場合に使用する。
簡単な例を示そう。関数 fact
は 0 以上の整数に値を返し、それ以外の場合には panic
を呼ぶ。
package main import "fmt" func fact(n int) (int, error) { if n < 0 { panic("fact : domain error") } a := 1 for ; n > 1; n-- { a *= n } return a, nil } func main() { for x := 10; x >= -1; x-- { v, err := fact(x) if err != nil { fmt.Println(err) } else { fmt.Println(v) } } }
実行例。
^o^ > go run panic.go 3628800 362880 40320 5040 720 120 24 6 2 1 1 panic: fact : domain error goroutine 1 [running]: main.fact(0xffffffffffffffff, 0x1, 0x1, 0x2) C:/Users/takatoh/Documents/w/learning-go/panic.go:7 +0xb8 main.main() C:/Users/takatoh/Documents/w/learning-go/panic.go:18 +0x43 exit status 2
for
ループの最後で fact
に -1
を与えているので panic
が呼ばれている。