go语法基础与其他语言对比学习(8) | 青训营

102 阅读1分钟

defer关键字

作用

  • 在函数中,程序员经常需要创建资源,为了在函数执行完毕后,及时的释放资源,Go的设计者提供defer关键字
  • 在Golang中,程序遇到defer关键字, 不会立即执行defer后的语句,而是先将语句压入一个栈中,然后继续执行后面的语句

错误处理

defer+recover机制处理错误

  • 错误处理/捕获机制:

go中追求代码优雅,引入机制:defer+recover机制处理错误

内置函数recover:

image.png

import "fmt"
​
func main() {
    test()
    fmt.Println("上面的语句执行成功")
}
​
func test() {
    //利用defer+recover来捕获错误:defer后加上匿名函数的调用
    defer func() {
        //调用defer内置函数,可以捕获错误
        err := recover();
        //如果没有捕获错误,返回值为零值:nil
        if err != nil {
            fmt.Println("错误已经捕获")
            fmt.Println("err是", err)
        }
    }()
    num1 := 33
    num2 := 66
    result := num1 + num2
    fmt.Println(result)
}
  • 可见,相比Java的try catch finally,go要简洁且方便很多,增强代码可读性
  • 相对于Java的throw,go中也有自定义错误
  • 自定义错误

需要调用errors包下的New函数:函数返回error类型

image.png