程序开发 · 2023年8月7日

Go 中 defer 的执行顺序:后进先出,但参数值是如何确定的?

GOLANG小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《Go 中 defer 的执行顺序:后进先出,但参数值是如何确定的?》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!,

,
,
go中defer的执行顺序,在go语言中,defer是一种延迟执行函数的机制。对于下面的代码,大家可以思考一下其打印结果:,
答案:,同为新手,个人理解:,今天关于《Go 中 defer 的执行顺序:后进先出,但参数值是如何确定的?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在GOLANG公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!,
其次,defer注册延迟执行函数时,函数所需的参数值必须确定。,
首先,defer遵循后进先出的原则,因此打印顺序为3、2、1。,

逐行分析代码执行过程:

  • 初始化 a 为 1。
  • 依次注册3个defer函数,其中函数需要参数的值在注册时就确定。
  • 执行 a++,使 a 为 2。
  • 返回前按序执行defer函数:

    • 函数3:传入实参 a=1,在注册时分配内存存储形参 a’。函数执行时,打印 1。
    • 函数2:同上。
    • 函数1:无参函数,注册时不分配内存。函数执行时,查找参数 a(此时为 2),打印 2。

,GOLANG小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《Go 中 defer 的执行顺序:后进先出,但参数值是如何确定的?》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!,

当前位置: > > > > Go 中 defer 的执行顺序:后进先出,但参数值是如何确定的?

Go 中 defer 的执行顺序:后进先出,但参数值是如何确定的?

2024-10-27 17:00:54
0浏览
收藏

GOLANG小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《Go 中 defer 的执行顺序:后进先出,但参数值是如何确定的?》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!

go中defer的执行顺序

在go语言中,defer是一种延迟执行函数的机制。对于下面的代码,大家可以思考一下其打印结果:

func main() {
    a := 1
    defer fmt.Println(a)
    defer func(s int) { fmt.Println(s) }(a)
    defer func() { fmt.Println("normal defer") }()
    a++
}

答案:

同为新手,个人理解:

  • 首先,defer遵循后进先出的原则,因此打印顺序为3、2、1。
  • 其次,defer注册延迟执行函数时,函数所需的参数值必须确定。
  • 逐行分析代码执行过程:

    • 初始化 a 为 1。
    • 依次注册3个defer函数,其中函数需要参数的值在注册时就确定。
    • 执行 a++,使 a 为 2。
    • 返回前按序执行defer函数:

      • 函数3:传入实参 a=1,在注册时分配内存存储形参 a’。函数执行时,打印 1。
      • 函数2:同上。
      • 函数1:无参函数,注册时不分配内存。函数执行时,查找参数 a(此时为 2),打印 2。

今天关于《Go 中 defer 的执行顺序:后进先出,但参数值是如何确定的?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在GOLANG公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

PHP函数如何接收对象参数?
CSS 动画中如何实现突变效果?