登录
首页 >  Golang >  Go教程

Go defer 语句执行顺序:为什么代码输出 221?

时间:2024-11-03 11:54:44 276浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《Go defer 语句执行顺序:为什么代码输出 221?》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

Go defer 语句执行顺序:为什么代码输出 221?

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函数遵循后进先出的原则,因此执行顺序为:

  1. func(a int) { fmt.println(a) }
  2. fmt.println(a)
  3. fmt.println(a)

理解参数传递

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?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>