我正在尝试创建一个简单的程序来学习Go中的频道。但是我遇到了死锁错误,我无法弄清楚package mainimport ( "fmt" "time")func printer(c chan int) { for i := 0; i < 10; i++ { c <- i time.Sleep(time.Second) }}func reciever(c chan int) { for { recievedMsg := <-c fmt.Println(recievedMsg) }}func main() { newChanel := make(chan int) printer(newChanel) reciever(newChanel)}我最初的想法是关于睡眠功能,但是即使我不包括此功能,我仍然会遇到此错误并退出消息。任何人都可以提出一些有关如何解决此问题的提示吗?
1 回答
慕的地10843
TA贡献1785条经验 获得超8个赞
您需要两个执行线程,因为现在reciever无法调用该函数,因为您永远不会离开该printer函数。您需要在单独的goroutine上执行其中之一。
您还应该close在通道中使用该通道,并range在循环中使用该运算符,以使其在关闭通道时结束。
因此,我向您建议此代码:
func printer(c chan int) {
for i := 0; i < 10; i++ {
c <- i
time.Sleep(time.Second)
}
close(c)
}
func reciever(c chan int) {
for recievedMsg := range c {
fmt.Println(recievedMsg)
}
}
func main() {
newChanel := make(chan int)
go printer(newChanel)
reciever(newChanel)
}
- 1 回答
- 0 关注
- 220 浏览
添加回答
举报
0/150
提交
取消