2 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個贊
你有一個無緩沖的通道,這意味著你不能在它上面發(fā)送,直到有東西等待接收。
所以當(dāng)你這樣做時:
wg.Wait()
在你做之前
for v := range myChanel
您將永遠(yuǎn)無法到達(dá)接收器。
無論如何,在使用無緩沖通道時,我從來不需要使用等待組,根據(jù)我的經(jīng)驗(yàn),您只需要在沒有通道的情況下進(jìn)行并發(fā)處理時才需要它們。你可以這樣做:https: //play.golang.org/p/-SUuXGlFd1E

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個贊
我解決了
運(yùn)行
package main
import (
"fmt"
"sync"
"time"
)
func other(c chan int, wg *sync.WaitGroup) {
time.Sleep(time.Second*1)
c <- 455
wg.Done()
}
func addInt(c chan int, d int, wg *sync.WaitGroup) {
c <- d
wg.Done()
}
func main() {
var wg sync.WaitGroup
myChanel := make(chan int)
wg.Add(2)
go addInt(myChanel, 5, &wg)
go other(myChanel, &wg)
go func() {
wg.Wait()
close(myChanel)
}()
for v := range myChanel {
fmt.Println(v)
}
}
- 2 回答
- 0 關(guān)注
- 164 瀏覽
添加回答
舉報