登录
首页 >  Golang >  Go教程

Go语言报错fatal error: all goroutines are asleep - deadlock!怎么解决

来源:亿速云

时间:2023-03-03 19:54:34 282浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《Go语言报错fatal error: all goroutines are asleep - deadlock!怎么解决》,就很适合你!文章讲解的知识点主要包括go语言,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

今天小编给大家分享一下Go语言报错fatal error: all goroutines are asleep - deadlock!怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

go 遍历通道与关闭通道

Go 通过 range 关键字来实现遍历读取到的数据,类似于与数组或切片。格式如下:

v, ok :=

如果通道接收不到数据后 ok 就为 false,这时通道就可以使用 close() 函数来关闭。

代码示例:

package main

import (
        "fmt"
)

func fibonacci(n int, c chan int) {
        x, y := 0, 1
        for i := 0; i 

 备注:如果不关闭通道,则报错:fatal error: all goroutines are asleep - deadlock!

 错误代码示例:

package main

import (
  "fmt"
  "time"
)

func testDeadLock(c chan int){
  for{
    fmt.Println(

原因:首先我们这里通过make(chan int),开辟的通道是一种无缓冲通道,所以当对这个缓冲通道写的时候,会一直阻塞等到某个协程对这个缓冲通道读(大家发现没有这个与典型的生产者消费者有点不一样,当队列中“内容”已经满了,生产者再生往里放东西才会阻塞,而这里我讲c

main函数的执行在go语言中本身就是一个协程的执行,所以在执行到c

修改后代码示例:

package main

import (
  "fmt"
  "time"
)

func testDeadLock(c chan int){
  for{
    fmt.Println(

以上就是“Go语言报错fatal error: all goroutines are asleep - deadlock!怎么解决”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注golang学习网行业资讯频道。

理论要掌握,实操不能落!以上关于《Go语言报错fatal error: all goroutines are asleep - deadlock!怎么解决》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

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