给出以下简单的Go程序package mainimport ( "fmt")func total(ch chan int) { res := 0 for iter := range ch { res += iter } ch <- res}func main() { ch := make(chan int) go total(ch) ch <- 1 ch <- 2 ch <- 3 fmt.Println("Total is ", <-ch)}我想知道有人能否启发我throw: all goroutines are asleep - deadlock!谢谢你
2 回答
森栏
TA贡献1810条经验 获得超5个赞
由于您从不关闭ch通道,因此范围循环将永远不会结束。
您无法在同一频道上发送结果。一种解决方案是使用不同的解决方案。
您的程序可以像这样进行修改:
package main
import (
"fmt"
)
func total(in chan int, out chan int) {
res := 0
for iter := range in {
res += iter
}
out <- res // sends back the result
}
func main() {
ch := make(chan int)
rch := make(chan int)
go total(ch, rch)
ch <- 1
ch <- 2
ch <- 3
close (ch) // this will end the loop in the total function
result := <- rch // waits for total to give the result
fmt.Println("Total is ", result)
}
- 2 回答
- 0 关注
- 162 浏览
添加回答
举报
0/150
提交
取消