/* go通道选择 Select go 的select关键字可以让你同时等待多个通道操作 将协程 通道和select结合起来构成了go的一个强大特性 */ package main import ( "fmt" "github.com/syyongx/php2go" "time" ) func main() { c1 := make(chan string) go func() { fmt.Println(php2go.Time()) time.Sleep(time.Second * 1) c1 <- "one" }() go func() { fmt.Println(php2go.Time()) time.Sleep(time.Second * 2) c1 <- "two" }() go func() { fmt.Println(php2go.Time()) time.Sleep(time.Second * 10) c1 <- "10" }() /* 如我们所期望的 程序输出了正确的值 对于select语句而言 它不断地检测通道是否有值过来 一旦有值过来立刻获取输出 */ //我们使用select来等待通道的值 然后输出 for i := 0; i < 3; i++ { select { case x := <-c1: fmt.Println(x) case <- time.After(time.Second *2): fmt.Println("read time out") } } }