作者:geektutu
链接:https://geektutu.com/post/gee-day6.html
7. Gee - 错误恢复(Panic Recover)
- 实现错误处理机制。
panic
Go 语言中,比较常见的错误处理方法是返回 error
,由调用者决定后续如何处理。但如果是无法恢复的错误,则可以手动触发 panic
,同时,如果在程序运行过程中出现了类似于数组越界的错误,panic
也会被触发。所谓panic
,会中止当前执行的程序并退出。
下面是主动触发的例子:
// testPanic.go
package main
import "fmt"
func main() {
fmt.Println("before panic")
panic("crash")
fmt.Println("after panic")
}
执行后:
$ go run testPanic.go
before panic
panic: crash
goroutine 1 [running]:
main.main()
/Users/Code/goProject/testPanic.go:8 +0x95
exit status 2
下面是数组越界触发的 panic
// testPanic.go
package main
import "fmt"
func main() {
arr := []int{
1, 2, 3}
fmt.Println(arr[4])
}
执行:
$ go run testPanic.go
panic: runtime error: index out of range [4] with length 3
goroutine 1 [running]:
main.main()
/Users/Code/goProject/testPanic.go:8 +0x1d
exit status 2
defer
panic
会导致程序被中止,但是在退出前,会先处理完当前协程上已经defer
的任务,执行完成后再退出。
// testDefer.go
func main() {
defer func() {
fmt.Println("defer func")
}()
arr := []int{
1, 2, 3}