Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
497 views
in Technique[技术] by (71.8m points)

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

image.png

image.png

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

主要是由于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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...