所以我一直在尝试使用 WaitGroup 并行运行多个 goroutine。无论我尝试什么,我总是以“致命错误:所有 goroutine 都处于睡眠状态 - 死锁!”而告终。
这就是我的代码现在的样子:
package main
import (
"fmt"
"sync"
"time"
)
func main() {
ch := make(chan time.Duration)
var wg sync.WaitGroup
for _, v := range []time.Duration{5, 1} {
wg.Add(1)
go func() {
defer wg.Done()
wait(v, ch)
}()
}
wg.Wait()
}
func wait(seconds time.Duration, c chan time.Duration) {
time.Sleep(seconds * time.Second)
c <- seconds
}
然而,这会导致死锁,我不知道为什么。
我一直在尝试使用以下代码读取 WaitGroup 之后的值:
close(ch)
for v := range ch {
fmt.Println(v)
}
然而,它似乎甚至不会到达这部分。
谢谢!