golang 协程学习

协程数据传递问题

  

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()
}

  通过对协程内的断言结果可以看出来,如果在异步协程内直接使用外部变量,实际异步协程在真正执行时,获取的时主协程阻塞时变量的值;

  而对于通过参数复制传递方式的结果,主协程的操作不会影响(值类型数据)到异步协程中的值

异步协程的执行需要在主协程阻塞式才会开始执行

上一篇:go sync.WaitGroup


下一篇:27. 学习 Go 协程:WaitGroup