defer关键字
作用
- 在函数中,程序员经常需要创建资源,为了在函数执行完毕后,及时的释放资源,Go的设计者提供defer关键字
- 在Golang中,程序遇到defer关键字, 不会立即执行defer后的语句,而是先将语句压入一个栈中,然后继续执行后面的语句
错误处理
defer+recover机制处理错误
- 错误处理/捕获机制:
go中追求代码优雅,引入机制:defer+recover机制处理错误
内置函数recover:
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类型