Go语言闭包共享变量的原因是什么,怎样解决
导读:关于“Go语言闭包共享变量的原因是什么,怎样解决”的知识点有一些人不是很理解,对此小编给大家总结了相关内容,文中的内容简单清晰,易于学习与理解,具有一定的参考学习价值,希望能对大家有所帮助,接下来就跟随小编一起学习一下“Go语言闭包共享变量...
关于“Go语言闭包共享变量的原因是什么,怎样解决”的知识点有一些人不是很理解,对此小编给大家总结了相关内容,文中的内容简单清晰,易于学习与理解,具有一定的参考学习价值,希望能对大家有所帮助,接下来就跟随小编一起学习一下“Go语言闭包共享变量的原因是什么,怎样解决”吧。下面由golang教程栏目给大家分享一个go语言采坑:闭包共享变量问题,希望对需要的朋友有所帮助!
话不多说,直接看代码和注释:
package mainimport ( "fmt" "time")func main() { // 错误示例(打印出的结果是5个6) fmt.Println("closure buggy example...") for i := 1; i = 5; i++ { // 每个goroutine共享一个变量,goroutine还没开始的时候,i已经变成了6 go func() { fmt.Println(i) } () } time.Sleep(1 * time.Second) // 正确示例1: fmt.Println("normal example...") for i := 1; i = 5; i++ { go func(i int) { // 使用局部变量 fmt.Println(i) } (i) } time.Sleep(1 * time.Second) // 正确示例2: fmt.Println("normal example 2...") for i := 1; i = 5; i++ { i := i // 为每个闭包创建一个变量 go func() { fmt.Println(i) } () } time.Sleep(1 * time.Second)}
运行得到的结果如下:
closure buggy example...66666normal example...52134normal example 2...52134
原因和解决方法见代码注释。第一个例子是错误示例,第二、三个例子是正确示例。
以上就是关于“Go语言闭包共享变量的原因是什么,怎样解决”的介绍了,感谢各位的阅读,希望文本对大家有所帮助。如果想要了解更多知识,欢迎关注网络,小编每天都会为大家更新不同的知识。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Go语言闭包共享变量的原因是什么,怎样解决
本文地址: https://pptw.com/jishu/654678.html