WaitGroup 的注意事项
WaitGroup不能复制
现象: WaitGroup作为函数的参数进行传递(函数参数是值传递)时,会造成死锁,只能使用WaitGroup指针传递
。
原因: WaitGroup有nocopy字段,不能被复制。
建议:避免WaitGroup在函数之间传递,是在要共用必须采取指针传递
Add计数器小于0会直接panic
现象:Add一个负数,如果计数器的值小于0会直接panic
原因:Add计数器必须大于0
建议:Add计数器必须大于0Add在Wait之后调用,比如一些子协程开头调用Add结束调用Wait,这些Wait无法阻塞子协程。正确做法是在开启子协程之前先Add特定的值。
未置为0就重用,WaitGroup可以完成一次编排任务,计数值降为0后可以继续被其他任务所用,但是不要在还没使用完的时候就用于其他任务,这样由于带着计数值,很可能出问题。
add和done必须成对出现