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 //跳出循环 } }