我是Go语言的新手,正在寻找一些关于并发模型的帮助。假设我想同时进行2个http调用,并等待它们都完成,然后处理/合并响应数据。这是我的代码
func main() {
var wg sync.WaitGroup
wg.Add(2)
c1 := make(chan string)
c2 := make(chan string)
go foo(c1, &wg)
go bar(c2, &wg)
wg.Wait()
foo := <-c1
bar := <-c2
fmt.Println("foo: ", foo)
fmt.Println("bar: ", bar)
}
func foo(c chan string, wg *sync.WaitGroup) {
defer wg.Done()
c <- "foo"
}
func bar(c chan string, wg *sync.WaitGroup) {
defer wg.Done()
c <- "bar"
}
但是,当我运行它时,它给出了错误fatal error: all goroutines are asleep - deadlock!
我可以在没有WaitGroup的情况下让它工作,但只是好奇为什么这会陷入僵局,以及最好的方法是什么?
富国沪深
ABOUTYOU
慕工程0101907
相关分类