gpt4 book ai didi

go - 打印机接收器程序中的 "all goroutines are asleep - deadlock! Exit status 2"错误

转载 作者:IT王子 更新时间:2023-10-29 01:18:50 28 4
gpt4 key购买 nike

我正在尝试创建一个简单的程序来学习 Go 中的 channel 。但是我遇到了一个死锁错误,我无法弄清楚

package main

import (
"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)
}

我最初的想法是关于 sleep 功能,但即使我不包括它,我仍然会遇到这个错误并退出消息。任何人都可以就如何解决这个问题给出一些提示吗?

提前致谢

最佳答案

您需要两个执行线程,因为现在无法调用 reciever 函数,因为您永远不会离开 printer 函数。您需要在单独的 goroutine 上执行其中之一。

您还应该关闭 channel 并在循环中使用range 运算符,以便在 channel 关闭时结束。

所以我向你推荐这段代码:

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)
}

关于go - 打印机接收器程序中的 "all goroutines are asleep - deadlock! Exit status 2"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12391371/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com