登录
首页 >  Golang >  Go问答

如何解决golang中关闭chan的问题

来源:stackoverflow

时间:2024-04-03 12:03:36 169浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《如何解决golang中关闭chan的问题》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

需要编写一个删除重复项的函数 但我收到错误可能是什么问题

func remDup(in, out chan string) {
 for {
     val, ok := <-in
     if ok == false {
         break
     } else {
         if val != <-out{
             out <- val
         }
     }
 }
 close(out)
}


:fatal error: all goroutines are asleep - deadlock!

解决方案


我认为这是因为您使用无缓冲通道并且通道为空或发送者未准备好,如下所示:

out := make(chan string)

此行为在 channel specs 中得到了很好的解释:

还有来自effective Go channel

如果您想让接收方等待来自通道的任何数据,并且您不知道发送方是否已向通道发送数据,请使用缓冲通道

out := make(chan string, 100)

理论要掌握,实操不能落!以上关于《如何解决golang中关闭chan的问题》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>