package main /* Channel Channel 是 goroutine 沟通的桥梁, goroutine是通过通信来进行内存的共享, 而不是通过内存的共享来进行通信,通过Channel通道来共享内存, 通过通道的通信(写进去在读出来)进行数据的传递,大都是阻塞同步的 通过 make 创建,close 关闭 Channel 是引用类型 可以使用 for range 来迭代不断操作 channel 可以设置单向(只读或者只写)或双向通道(读写) 可以设置缓存大小,不设置就是0是阻塞的,在未被填满前不会发生阻塞, 有缓存是异步的无缓存是同步的, Select 可处理一个或多个 channel 的发送与接收 同时有多个可用的 channel时按随机顺序处理 可用空的 select 来阻塞 main 函数 */ import ( "fmt" ) func main1() { c := make(chan int) go func() { //不断从c读值 for v := range c { fmt.Println(v) } }() for { select { //随机向c中写0或者1 case c <- 0: case c <- 1: } } } func main() { c := make(chan int) go func() { //不断从c读值 for v := range c { fmt.Println(v) } }() for { select {} //空的select,没有发送和接收,完全阻塞main函数, } } /* c1: 1 c2: c2 c1: 3 c2: c22 */