首页 > 其他分享 >Go - ERROR: fatal error: all goroutines are asleep - deadlock!

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

时间:2023-09-27 16:24:10浏览次数:32  
标签:ch deadlock chan Go asleep func ERROR go main

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

 

标签:ch,deadlock,chan,Go,asleep,func,ERROR,go,main
From: https://www.cnblogs.com/zhangzhihui/p/17732985.html

相关文章