0
点赞
收藏
分享

微信扫一扫

Go 快速入门指南 - panic/recover 函数

妖妖妈 2022-12-24 阅读 99

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 个错误: 测试
*/

Go 快速入门指南 - panic/recover 函数_Go

举报

相关推荐

0 条评论