/*
   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")
		}
	}

}