English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Panicは、エラー状況を処理するために使用するメカニズムです。緊急事態は関数の実行を中止するために使用できます。関数がpanicを呼び出した場合、その実行は停止し、関連する遅延関数に制御フローが移行します。
この関数の呼び出し元も終了され、呼び出し元の遅延関数も実行されます(あれば)。このプロセスはプログラムの終了まで続きます。現在のエラー状況を報告します。
この終了シーケンスはpanicと呼ばれ、内蔵関数recoverで制御できます。
package main import "os" func main() { panic("エラー状況") _, err := os.Open("/tmp/file) if err != nil { panic(err) } }
出力:
panic: エラー状況 goroutine 1 [実行中]: main.main() /Users/pro/GoglandProjects/Panic/panic example1.go:6 +0x39
package main import "fmt" func main() { fmt.Println("mainからxを呼び出し.") x() fmt.Println("xから復旧.") } func x() { defer func() { if r := recover(); r != nil { fmt.Println("xで復旧", r) } }() fmt.Println("xを実行中...") fmt.Println("yを呼び出し.") y(0) fmt.Println("yから通常に復旧.") } func y(i int) { fmt.Println("yを実行中....") if i > 2 { fmt.Println("パニック中!") panic(fmt.Sprintf("%v", i)) } defer fmt.Println("yで遅延", i) fmt.Println("yで印刷", i) y(i + 1) }
出力:
mainからxを呼び出し。 xを実行中... yを呼び出し。 yを実行中.... yで印刷0 yを実行中.... yで印刷 1 yを実行中.... yで印刷 2 yを実行中.... パニック中! yで遅延 2 yで遅延 1 yで遅延 xで復旧 3 xから返却