1. 程式人生 > >Go for迴圈 協程間傳遞引數的一個問題

Go for迴圈 協程間傳遞引數的一個問題

map1 := make(map[int]int)

for i:=0; i<3; i++{
	map1[i] = i+1
}

fmt.Println(map1)

for k, v := range map1{
	go func(key, value int){
		fmt.Println("one way :", key, " : ", value)
	}(k, v)

	go func(){
		time.Sleep(time.Second)
		fmt.Println("another way :", k, " : ", v)
	}()
}

輸出:

map[2:3 0:1 1:2]
one way : 1  :  2
one way : 0  :  1
one way : 2  :  3
another way : 2  :  3
another way : 2  :  3
another way : 2  :  3

這看起來跟 js 裡面的 for 迴圈匿名函式傳參的問題差不多。就是說匿名函式真正執行的時候,傳入形參的值已經確定。

如果想要達到想要的效果需要進行第一種傳參形式。