fatal error: all goroutines are asleep - deadlock!

go 复制代码
func main() {

	var taskChannle =make(chan int)

	taskChannle <- 1

	fmt.Println(<-taskChannle)

channel初始化时没有指定缓冲的话,默认是没有缓冲的。也就是说往channel中send数据是一个阻塞操作,直到Channle有读取操作。

所以当代码执行到taskChannle <- 1时就产生了阻塞,不会往下走,所以go就认为all goroutines are asleep - deadlock!

将代码改成如下:

go 复制代码
func main() {

	var taskChannle =make(chan int)

	go func() {
		fmt.Println(<-taskChannle)
	}()
	
	taskChannle <- 1

就不会产生死锁,或者声明带缓冲的channel

推荐阅读

1、原来阿里字节员工简历长这样

2、一条SQL差点引发离职

3、MySQL并发插入导致死锁


如果你也觉得我的分享有价值,记得点赞或者收藏哦!你的鼓励与支持,会让我更有动力写出更好的文章哦!

相关推荐
云浪2 小时前
Go 并发实战:从零实现一个高并发安全的任务调度器
javascript·后端·go
敲代码的玉米C3 小时前
并排 diff、提交标签:砚的 Git 阅读体验又补了一轮
go
敲代码的玉米C3 小时前
给编辑器补拖拽:标签挪过去,状态也得跟过去
go
敲代码的玉米C3 小时前
写到这里,砚还要继续照着 IDE 加功能吗
go
敲代码的玉米C3 小时前
把终端拖进编辑区,别把正在跑的 shell 弄丢了
go
敲代码的玉米C3 小时前
给砚加一个「所有改动」页,提交前少来回点几次
go
96245613 小时前
Go EVM 链上数据平台实践:从 RPC Demo 到可演进架构
rpc·架构·golang
银河技术18 小时前
从脚本到 Operator:用 Go 构建可靠的微服务自动扩缩容控制器
开发语言·微服务·golang
我不会起名字3221 天前
微服务链路超时怎么设:逐层收敛的 4 条规则与 1 个反例
微服务·go·超时·熔断
我的div丢了肿么办2 天前
go语言安装包详细讲解
后端·go