恐慌

紧急停止正常执行流程并退出当前功能。然后,在将控制传递给堆栈上的下一个更高功能之前,将执行任何延迟调用。每个堆栈的函数将退出并运行延迟调用,直到使用延迟 recover() 处理恐慌,或直到恐慌到达 main() 并终止程序。如果发生这种情况,提供给恐慌的参数和堆栈跟踪将打印到 stderr

package main

import "fmt"

func foo() {
    defer fmt.Println("Exiting foo")
    panic("bar")
}

func main() {
    defer fmt.Println("Exiting main")
    foo()
}

输出:

Exiting foo
Exiting main
panic: bar

goroutine 1 [running]:
panic(0x128360, 0x1040a130)
    /usr/local/go/src/runtime/panic.go:481 +0x700
main.foo()
    /tmp/sandbox550159908/main.go:7 +0x160
main.main()
    /tmp/sandbox550159908/main.go:12 +0x120

重要的是要注意 panic 将接受任何类型作为其参数。