go - 不确定为什么这是 golang 中的僵局?

标签 go

我是 Go 的新手,不确定为什么会出现死锁?我想不断地读取 doSomething 的结果并将其存储在函数 read 中而不使用 for 循环

func doSomething(c chan<- string){ // recursive function does something
    c <- result 
    return dosomething(c)  }

func reads(c <-chan string){
    results := ""   
    temp := <-c         
    results = results + "\n" + temp      
    return results
}

func main(){     
    go reads(c)
    doSomething(c)
}

最佳答案

Main gorouting 尝试多次写入 doSomething 函数中的 channel 。 read 函数只读取 channel 一次。因此写操作将等到其他方从 channel 中读取。由于主 goroutine 被阻塞,这将导致死锁。

如果阻塞操作不在 main goroutine 中,则程序将在 main goroutine 结束时随着 Go 程序结束而结束。如果 main 函数可以结束,就不会有死锁。

关于go - 不确定为什么这是 golang 中的僵局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42087504/

相关文章:

java - 如何使用 GOLang 通过调用 REST API 在 BitBucket 中创建存储库

go - 您如何查看已安装的导入包中的 .go 文件?

logging - 如何使用golang客户端写入连续写入influxdb

http - 通过HTTP发送文件而没有实际创建任何文件

go - 如何用Go boot编写内核?

go - 从 golang 中的嵌套映射中检索值

google-app-engine - 寻找一种使用ajax使用angularjs将文件上传到应用程序引擎的方法

go - 如何使用 golang 中的 revel 框架从 Controller 模拟服务?

regex - 如何在 Go 正则表达式中获取捕获组功能

azure - 为什么这个简单的 Go 服务器不在 Azure 应用服务中运行?