GO教程
GO控制语句
GO高级

Go Panic

Go Panic

Go panic 是我们处理错误情况的一种机制。恐慌可用于中止函数执行。当一个函数调用 panic 时,它的执行会停止并且控制流向关联的延迟函数。
这个函数的调用者也被终止并且调用者的延迟函数被执行(如果有的话)。这个过程一直持续到程序终止。现在报告错误情况。
这种终止序列称为恐慌,可以由内置函数recover控制。

Go Panic Example 1:

package main
import "os"
func main() {
    panic("Error Situation")
    _, err := os.Open("/tmp/file")
    if err != nil {
        panic(err)
    }
}
输出:
panic: Error Situation
goroutine 1 [running]:
main.main()
/Users/pro/GoglandProjects/Panic/panic example1.go:6 +0x39

进入恐慌示例 2

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
Returned from x.

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4