Go - ERROR: fatal error: all goroutines are asleep - deadlock!

发布时间 2023-09-27 16:23:03作者: ZhangZhihuiAAA

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.

 

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