English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Panic은 오류 상황을 처리하는 메커니즘입니다. 긴급 상황은 함수 실행을 중지할 수 있습니다. 함수가 panic을 호출할 때, 그 실행이 중지되고 관련 지연 함수로 컨트롤 플로우가 이동합니다.
이 함수의 호출자도 종료되고, 호출자의 지연 함수도 실행됩니다(있는 경우). 이 과정은 프로그램이 끝날 때까지 지속됩니다. 지금 오류 상황을 보고합니다.
이 종료 시퀀스는 panic이라고 불리며, 내장 함수 recover로 제어될 수 있습니다。
package main import "os" func main() { _,/tmp/file) if err != nil { panic(err) } }
输出:
panic: Error Situation goroutine 1 [running]: main.main() /Users/pro/GoglandProjects/Panic/panic example1.go:6 +0x39
package main import "fmt" func main() { fmt.Println("Calling x from main.") x() fmt.Println("Returned from x.") } func x() { defer func() { if r := recover(); r != nil { fmt.Println("Recovered in x", r) } }() fmt.Println("Executing x...") fmt.Println("Calling y.") y(0) fmt.Println("Returned normally from y.") } func y(i int) { fmt.Println("Executing y....") if i > 2 { fmt.Println("Panicking!") panic(fmt.Sprintf("%v", i)) } defer fmt.Println("Defer in y", i) fmt.Println("Printing in y", i) y(i + 1) }
输出:
Calling x from main. Executing x... Calling y. Executing y.... Printing in y 0 Executing y.... Printing in y 1 Executing y.... Printing in y 2 Executing y.... Panicking! Defer in y 2 Defer in y 1 Defer in y 0 Recovered in x 3 x에서 돌아왔습니다.