go打印defer分析
在以下代码中:
package main import "fmt" func main() { a := 1 defer fmt.println(a) a++ defer fmt.println(a) defer func(a int) { fmt.println(a) }(a) }
程序的打印结果为:
2 2 1
理解打印顺序
这个问题涉及到go语言中defer关键字的使用。defer指延迟执行的意思,即在当前函数返回前执行defer后面的函数。
defwer函数遵循后进先出的原则,因此执行顺序为:
理解参数传递
defwer注册要延迟执行的函数时,该函数所有的参数都需要确定其值。因此在代码中,a++操作是在defer函数注册之后执行的。
在第一个defer函数中,func(a int) { fmt.println(a) },参数a在注册时被赋值为此时的实参a=1。随后执行输出1。
在第二个defer函数中,fmt.println(a),参数a也同样在注册时被赋值为此时的实参a=1。
在第三个defer函数中,无参函数,执行时先上寻找参数a(此时为2)。
以上就是Go defer 语句执行顺序:为什么代码输出 221?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号