我读到循环迭代器上的 goroutine 通常会导致每次迭代都使用循环赋值中的最后一个值。例如https://github.com/golang/go/wiki/CommonMistakes#using-goroutines-on-loop-iterator-variables
但是,这只发生在闭包中,例如使用匿名函数吗?
我似乎无法通过此示例重现问题https://play.golang.org/p/lpZ-yD1mHu
当我使用这样的匿名函数时,它会重新创建问题https://play.golang.org/p/mDa0Z6mUP8
\n\n\n然而,这只是闭包的问题吗,例如匿名函数?
\n
是的。和...之间的不同
\n\ngo speak(c)\nRun Code Online (Sandbox Code Playgroud)\n\n和
\n\ngo func() {\n speak(c)\n}()\nRun Code Online (Sandbox Code Playgroud)\n\n也就是说,前者在新的 goroutine 中使用 的值speak进行调用。然而,在后一种情况下,匿名函数捕获的不是变量的值,而是变量本身(通过引用\xc2\xb9),并且在稍后的某个时间点,使用此时具有的任何值进行调用。cccspeakc
\xc2\xb9:golang 中没有“引用”,我不确定这是如何具体实现的,但就好像它们引用了原始变量。
\n| 归档时间: |
|
| 查看次数: |
2312 次 |
| 最近记录: |