ZhangZhihui's Blog  

main.go:

复制代码
package main

import "fmt"

func main() {
    ch := make(chan int)
    ch <- 1
    a := <-ch
    fmt.Println(a)
}
复制代码

Got error:

zzh@ZZHPC:/zdata/MyPrograms/Go/testing$ go run main.go
fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan send]:
main.main()
        /zdata/MyPrograms/Go/testing/main.go:7 +0x36
exit status 2

Cause:

The channel is unbuffered, so when you try to send a value down that channel, it blocks forever, waiting for someone to fetch a value. You need to start a new goroutine, or make the channel buffered and use it as an array.

Both sending and retrieving data through non-buffered channel are blocking processes.

So below code also got error:

复制代码
package main

import "fmt"

func main() {
    ch := make(chan int)
    a := <-ch
    fmt.Println(a)
}
复制代码
zzh@ZZHPC:/zdata/MyPrograms/Go/testing$ go run main.go
fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan receive]:
main.main()
        /zdata/MyPrograms/Go/testing/main.go:7 +0x2f
exit status 2

Changing the channel to a buffered one without sending a value to it CANNOT fix the error:

复制代码
package main

import "fmt"

func main() {
    ch := make(chan int, 1)
    a := <-ch
    fmt.Println(a)
}
复制代码
zzh@ZZHPC:/zdata/MyPrograms/Go/testing$ go run main.go
fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan receive]:
main.main()
        /zdata/MyPrograms/Go/testing/main.go:7 +0x32
exit status 2

 

Correction 1:

复制代码
package main

import "fmt"

func main() {
    ch := make(chan int, 1)
    ch <- 1
    a := <-ch
    fmt.Println(a)
}
复制代码

Correction 2:

复制代码
package main

import "fmt"

func main() {
    ch := make(chan int)
    go func() {
        ch <- 1
    }()
    a := <-ch
    fmt.Println(a)
}
复制代码

Both got below result:

zzh@ZZHPC:/zdata/MyPrograms/Go/testing$ go run main.go
1

 

posted on   ZhangZhihuiAAA  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
 
点击右上角即可分享
微信分享提示