GO精髓,Channel

通道(Channel)

       /*
        通道(channel)是用来传递数据的一个数据结构。
        */
        ch1 := make(chan int ,2) //创建一个可读可写的双向管道
        ch1 <- 10
        ch1 <- 12

        m1 := <-ch1
        m2 := <-ch1
        fmt.Println(m1,m2)

        ch2 := make(chan <- int ,2) //创建一个只可写的管道
        ch2 <- 10
        ch2 <- 12
        ch3 := make(<-chan  int ,2) //创建一个只可读的管道

select(多路复用)

//定义个管道 10个数据int
        intChan := make(chan int,10)
        for i:=1 ; i< 10 ;i++ {
                intChan <- i
        }
        
        //定义个管道 10个 数据string
        stringChan := make(chan string ,10)
        for i:=1 ;i < 5 ;i++ {
                stringChan <- "hello"+fmt.Sprintf("%d",i)
        }
        //使用select不需要关闭channel
        for  {
                select {
                case v := <-intChan:
                        fmt.Println("从intChan里面取数据%d",v)
                        time.Sleep(time.Millisecond * 50)
                case v := <-stringChan:
                        fmt.Println("从stringChan里面取数据%v",v)
                        time.Sleep(time.Millisecond * 50)
                default:
                        fmt.Println("所有数据获取完毕")
                        return  //跳出循环
                }
        }