我在以goroutines运行的函数中看到不正确的值。除非将它们复制到新变量中,否则它们似乎并没有从调用它们的范围中捕获值。
http://play.golang.org/p/YZYi-IVuYm
与
http://play.golang.org/p/z88G99XSi6
您或者需要在本地上下文中重新分配变量,以便闭包可以捕获值:
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) }
或者您将值传递给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) }