i think the compiler has identified both problems correctly; c is nil (no cases) and nothing is receiving from c (deadlock).
package main func main() { // var c chan struct{} c := make(chan struct{}) go func(x chan struct{}) { <-x }(c) select { case c <- f(): } } func f() struct{} { println("f called") return struct{}{} } On Wed, Aug 8, 2018 at 12:40 AM Kaveh Shahbazian <kaveh.shahbaz...@gmail.com> wrote: > According to this thread, for this program: > > package main > > func main() { > var c chan struct{} > > select { > case c <- f(): > } > } > > > func f() struct{} { > println("f called") > return struct{}{} > } > > The error message in the output: > > f called > fatal error: all goroutines are asleep - deadlock! > > goroutine 1 [select (no cases)]: > main.main() > /path/to/main.go:6 +0x45 > > Is a bit unclear since it says *select (no cases)* but the function *f* > is still being called - Go 1.10.3. > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.