跳转至

错误处理


更新于 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中