协程数据传递问题
func TestGoroutineData(t *testing.T) {
var wg sync.WaitGroup
wg.Add(1)
i := 0
go func(j int) {
t.Log("异步协程执行")
assert.Equal(t,0,j)
assert.Equal(t,1,i)
wg.Done()
}(i)
i = 1
t.Log("主协程阻塞")
wg.Wait()
}
通过对协程内的断言结果可以看出来,如果在异步协程内直接使用外部变量,实际异步协程在真正执行时,获取的时主协程阻塞时变量的值;
而对于通过参数复制传递方式的结果,主协程的操作不会影响(值类型数据)到异步协程中的值
异步协程的执行需要在主协程阻塞式才会开始执行