-
defer
defer 关键字,用于延迟执行一个函数在函数结束前执行
其执行顺序为 先进后出,可以理解为栈1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21defer fmt.Println(1)
defer fmt.Println(2)
defer fmt.Println(3)
fmt.Println(4)
4
3
2
1
*/
//eg:写文件
file, err := os.Create("a.txt")
if err != nil {
panic(err)
}
defer file.Close()
writer := bufio.NewWriter(file)
defer writer.Flush()
for i := 0; i < 10; i++ {
fmt.Fprintln(writer, i)
} -
错误处理
-
panic
停止当前函数执行
向上返回,执行每一层的defer
如果没有遇到revocer 程序退出
-
recover
仅在 defer 中调用
获取panic值
如果无法处理,可以重新panic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17defer func() {
r := recover()
if err, ok := r.(error); ok {
fmt.Println(err)
} else {
panic(fmt.Sprintln("unknown err:", r))
}
}()
panic(errors.New("this is an error"))
this is an error
*/
panic(1234)
panic: 123 [recovered]
panic: unknown err: 123
*/- error接口
-
近期评论