func main() {
for i := 0; i < 3; i++ {
go func() {
fmt.Println(i)
}()
}
time.Sleep(time.Second)
}
乍一看,以爲代碼輸出:
1
2
3
運行結果:
3
3
3
那是因爲先執行的函數,當運行到
time.Sleep(time.Second),這個位置,i的之已經是3了,gorouine才執行。
修改如下,輸出:1 2 3
func main() {
for i := 0; i < 3; i++ {
go func(v int) {
fmt.Println(v)
}(i)
}
time.Sleep(time.Second)
}