go语言中的匿名函数执行顺序

image.png

image.png

预计执行结果:
sdd
hello world, sdd
实际执行结果:
hello world, sdd
sdd
不明白其中的缘由,不应该先执行匿名函数吗?

阅读 3k
1 个回答

你的代码输出顺序结果应该是随机的,你可以多尝试一些次数

主要是由于println函数是向标准错误流中输出的
而fmt.Println函数是向标准输出流中输出

代码执行顺序肯定是先执行的匿名函数,再执行main后面的打印hello world流程
但是他们执行的内容只是向各自的流(错误流,输出流)中输入自己的内容,
但是这两个流什么时候向屏幕显示就需要抢占CPU了,也就是随机了。

你可以用下面代码验证下:

func main() {  
   tss := "sdd"  
 i := 1  
  
 func (){  
      println(tss)  
      i++  
   }()  
  
   fmt.Println("i is", i)  
}

你会发现不管是先输出的“i is 2”, 还是先输出的“sdd”,其i的值都是2,不可能输出1,即表示i++肯定是先于打印i is前就执行了。但是错误流和标准流什么时候输出到屏幕就随机了。

image.png
image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题