我在作为goroutines运行的函数中看到不正确的值.除非复制到新变量中,否则它们似乎不会从调用它们的范围捕获值.
http://play.golang.org/p/YZYi-IVuYm
与
您需要在本地竞赛中重新分配变量,以便闭包可以捕获值:
http://play.golang.org/p/-NO4S4qCZf
package main
import "fmt"
import "time"
func main() {
l := []int{1, 2, 3}
for idx, item := range l {
theIdx, theItem := idx, item
go func() {
fmt.Println(theIdx, theItem)
}()
}
time.Sleep(time.Second)
}
Run Code Online (Sandbox Code Playgroud)
或者将值传递给goroutine并向函数添加参数
http://play.golang.org/p/5gNToDWSQR
package main
import "fmt"
import "time"
func main() {
l := []int{1, 2, 3}
for idx, item := range l {
go func(idx, item int) {
fmt.Println(idx, item)
}(idx, item)
}
time.Sleep(time.Second)
}
Run Code Online (Sandbox Code Playgroud)