Go Panic

Go的panic机制用于处理错误情况。Panic可以用于终止函数的执行。当一个函数调用panic时,它的执行停止,并且控制流转到关联的延迟函数。

调用此函数的调用者也会被终止,并且调用者的延迟函数会被执行(如果有的话)。这个过程会一直继续,直到程序终止。现在错误条件被报告了。

这种终止序列被称为panic,并且可以通过内置函数recover来控制。

Go Panic示例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

Go Panic示例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.

标签: Golang, Golang下载, Golang教程, Golang技术, Golang学习, Golang学习教程, Golang语言, Golang开发, Golang入门教程, Golang进阶教程, Golang高级教程, Golang面试题, Golang笔试题, Golang编程思想