Go语言WaitGroup使用时需要注意的坑

2020-01-28 12:24:46王冬梅


2016/11/27 15:25:16 i:1
2016/11/27 15:25:16 i:2
2016/11/27 15:25:16 i:4
2016/11/27 15:25:16 i:0
2016/11/27 15:25:16 i:3
fatal error: all goroutines are asleep - deadlock!

wg 给拷贝传递到了 goroutine 中,导致只有 Add 操作,其实 Done操作是在 wg 的副本执行的。因此 Wait 就死锁了。

于是代码改成了这样:

填坑


package main
 
import (
    "log"
 
    "sync"
)
 
func main() {
    wg := &sync.WaitGroup{}
 
    for i := 0; i < 5; i++ {
        wg.Add(1)
        go func(wg *sync.WaitGroup, i int) {
            log.Printf("i:%d", i)
            wg.Done()
        }(wg, i)
    }
 
    wg.Wait()
 
    log.Println("exit")
}
 

总结

好了,到这里终于解决了,以上就是关于Go语言WaitGroup使用时需要注意的一些坑,希望本文中提到的这些问题对大家学习或者使用Go语言的时候能有所帮助,如果有疑问大家可以留言交流。