panic
panic
会终止程序并退出,因此只有在发生严重的错误时才会使用 panic
。
例子
主动触发
package main
func main() {
panic("some error...")
}
// $ go run main.go
// 输出如下
/**
panic: some error...
goroutine 1 [running]:
main.main()
/home/codes/Go-examples-for-beginners/main.go:4 +0x27
exit status 2
*/
除 0
package main
import "fmt"
func main() {
fmt.Println("除数不能为 0")
n := 0
fmt.Printf("5 / 0 = %d", 5/n)
}
// $ go run main.go
// 输出如下
/**
除数不能为 0
panic: runtime error: integer divide by zero
goroutine 1 [running]:
main.main()
/home/codes/Go-examples-for-beginners/main.go:15 +0x57
exit status 2
*/
recover
建议先阅读 defer 小节。
recover
会终止 panic
状态并且返回 panic
的值,函数会从 panic
之前执行到的地方直接返回,不会继续往下执行。
语法规则
recover
和 defer
必须配套使用, 如果 recover
在其他地方执行会返回 nil
,不会产生任何效果。 defer
必须在 panic
之前声明,否则 panic
会直接终止程序。
例子
错误捕获
package main
import "fmt"
func main() {
if r := recover(); r != nil {
fmt.Printf("捕获到 1 个错误: %v\n", r)
}
panic("测试")
println("程序执行不到这里")
}
// $ go run main.go
// 输出如下
/**
panic: 测试
...
...
exit status 2
*/
正确捕获
package main
import "fmt"
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Printf("捕获到 1 个错误: %v\n", r)
}
}()
panic("测试")
println("程序执行不到这里")
}
// $ go run main.go
// 输出如下
/**
捕获到 1 个错误: 测试
*/
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦