使用WaitGroup时,大概代码:
package main
import (
"fmt"
"time"
"sync"
)
var wg sync.WaitGroup
func f1() {
time.Sleep(1 * time.Second)
wg.Done()
}
func main() {
var i int
for i=0;i<3;i++ {
wg.Add(1)
go f1()
}
wg.Wait()
fmt.Println("end...")
}
在运行中程序突然崩溃,报错WaitGroup is reused before previous Wait has returned,原因是函数写了多个wg.Done()。
解决方法:在函数开头写上defer wg.Done()或者在函数底部写上wg.Done(),保证只有一个wg.Done()。