package main import "fmt" func f(x, y, z chan string) { defer close(x) a := make(chan bool) go func() { for i := 0; i < 3; i++ { x <- "hi" } a <- true }() <-a y <- "hello" z <- "hola" } func main() { x, y, z := make(chan string), make(chan string), make(chan string) go f(x, y, z) go func() { for m := range x { fmt.Println("m", m) } }() select { case b := <-y: fmt.Println("b", b) case c := <-z: fmt.Println("c", c) } fmt.Println("end") }