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 fatal error pcre2 found directory fatal error zlib connection internal fatal error directory fatal error bzlib directory osmesa fatal error directory bam2wig fatal error broken stdout fatal error