1 回答

TA貢獻1815條經驗 獲得超13個贊
有幾個問題。
第一個是程序在將它們作為參數傳遞時復制等待組值。復制時等待組不能正常工作。而是將指針傳遞給等待組。
第二個問題是 main 在從通道接收值之前等待所有 goroutines 完成。因為通道的緩沖區不夠大,無法容納所有發送的值,所以程序會死鎖。
第三個問題是通道上方的主要范圍,但沒有任何東西關閉通道。Main 不會因此退出。
要解決第二個和第三個問題,請啟動另一個 goroutine 等待doSomthings 并在完成后關閉通道。
嘗試這個:
func doSomething(ch chan string, wg *sync.WaitGroup) {
defer wg.Done()
ch <- fmt.Sprintf("doSomething: %d", i)
i++
if i == 10 {
return
}
wg.Add(1)
go doSomething(ch, wg)
}
func main() {
ch := make(chan string)
var wg sync.WaitGroup
wg.Add(1)
go doSomething(ch, &wg)
go func() {
wg.Wait()
close(ch)
}()
for s := range ch {
fmt.Println(s)
}
}
- 1 回答
- 0 關注
- 131 瀏覽
添加回答
舉報