错误处理
更新于 2022-10-22
关键字
| 关键字 |
作用 |
| defer |
|
| panic |
|
| recover |
|
defer
defer注册函数资源清理函数,当函数执行完后执行清理函数
defer 语句按逆序运行,先运行最后一个,最后运行第一个。
| Go |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | package main
import "fmt"
func main() {
for i := 1; i <= 4; i++ {
defer fmt.Println("deferred", -i)
fmt.Println("regular", i)
}
}
##输出:
regular 1
regular 2
regular 3
regular 4
deferred -4
deferred -3
deferred -2
deferred -1
|
panic
panic()立即停止当前函数并调用defer注册回调
然后逐层上报知道goroutine中所执行的函数停止
| Go |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | package main
import "fmt"
func highlow(high int, low int) {
if high < low {
fmt.Println("Panic!")
panic("highlow() low greater than high")
}
defer fmt.Println("Deferred: highlow(", high, ",", low, ")")
fmt.Println("Call: highlow(", high, ",", low, ")")
highlow(high, low + 1)
}
func main() {
highlow(2, 0)
fmt.Println("Program finished successfully!")
}
|
recover
recover用于终止错误处理流程
一般在defer中添加recover,避免函数退出到goruntine中