go语言基础 -- defer及其用法
2023-12-24 15:43:18
defer设计思想
在go语言中,程序员创建的资源如文件句柄、数据库连接、锁等,需要在函数执行完毕后释放,因此go提供了defer的机制,在函数退出时去释放defer指定的资源,这样我们在一些资源申请的时候,可以先defer 声明释放语句,无需担心后续忘记释放资源。defer利用了栈,先声明的defer后执行。
我们来看一个简单的例子:
package main
import (
"fmt"
)
func sum(n1 int, n2 int) int {
defer fmt.Println("n1:", n1)
defer fmt.Println("n2:", n2)
n3 := n1 + n2
fmt.Println("n3:", n3
return n3
}
func main() {
res := sum(10, 20)
fmt.Println("res:", res)
}
上面的输出会先输出n3,然后在函数退出时执行defer的栈内容,先输出n2,再输出n1,最后输出res
需要注意的是,defer在将语句入栈的时候,会将相关的值拷贝同时入栈,这意味着我们defer之后对变量的变更不会影响入栈时的值
文章来源:https://blog.csdn.net/qq_42936727/article/details/135181212
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!