2 回答
TA贡献1856条经验 获得超17个赞
你有一个无缓冲的通道,这意味着你不能在它上面发送,直到有东西等待接收。
所以当你这样做时:
wg.Wait()
在你做之前
for v := range myChanel
您将永远无法到达接收器。
无论如何,在使用无缓冲通道时,我从来不需要使用等待组,根据我的经验,您只需要在没有通道的情况下进行并发处理时才需要它们。你可以这样做:https: //play.golang.org/p/-SUuXGlFd1E
TA贡献1802条经验 获得超5个赞
我解决了
运行
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 关注
- 134 浏览
添加回答
举报