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
- goroutines deadlock asleep ERROR fatalgoroutines deadlock asleep error postgresql deadlock detected error directory fatal error file directory fatal error zlib fatal error pcre2 found connection internal fatal error directory fatal error bzlib directory bam2wig fatal error directory osmesa fatal error cataloging backups fatal error