我已经实现了 WaitGroup 但它没有按预期工作,我需要打印所有 1000 条日志,但实际结果只是 ~9xx 日志,我知道根本原因是第一个 gorouting 尚未完成,而其余的 goroutines 在缓冲通道的循环已经完成
我该如何解决这个问题?提前致谢
package main
import (
"log"
"sync"
)
func main() {
buffer := make(chan int, 5)
var wg sync.WaitGroup
wg.Add(1)
go func(wg *sync.WaitGroup) {
for i := 1; i <= 1000; i++ {
buffer <- i
}
close(buffer)
wg.Done()
}(&wg)
for item := range buffer {
wg.Add(1)
go func(wg *sync.WaitGroup, item int) {
log.Printf("done for item %d\n", item)
wg.Done()
}(&wg, item)
}
wg.Wait()
}
更新
我发现了问题,我在 GoLand IDE 中运行代码并且它不会打印所有日志,如果我在终端中运行它应该没问题
拉丁的传说
跃然一笑
相关分类