使用defer延迟执行来标记某些有返回值的函数调用时
defer db.Close()
上面这段代码的用处:在sql连接中使用关闭连接
idea 编辑器回提示没有接受返回值
使用defer 标记匿名函数
1:使用defer语句标记匿名函数
2:这个匿名函数没有返回值,也没有参数
3:匿名函数的最后需要添加括号
defer func() {
err := db.Close()
if err != nil {
fmt.Println("关闭错误:关闭数据库错误", err)
}
}()
当有参数时,需要在最后的括号中指定该参数,
为什么要在最后处指定该参数
因为:参数 i
如果会在其他语句中被改变的,那么这个延迟执行获取到的是被其他语句给改变后的值,而不是该段【defer +匿名函数】代码处的 参数i 的值
defer func(i) {
err1 := db.Close()
if err1 != nil {
fmt.Println("关闭错误:关闭数据库错误", err1)
}
}(i)
当前使用的golang版本是
PS C:\Docker\Gocode\gogin> go version
go version go1.19.5 windows/amd64