学习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的问题》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注编程网公众号吧!