channel的写入和读出
- 将一个数据写入(发送)至channel的语法
ch <- value
向channel写入数据通常会导致程序阻塞,直至有其他goroutine从这个channel中读取数据 - 从channel中读取数据
value := <-ch
如果channel中没有写入数据,那么从channel中读取数据也会导致程序阻塞,直到channel中被写入数据为止
select处理异步IO问题
select {
case <- chan1:
// 如果从chan1成功读到,则进行该case处理语句
case chan2 <- 1:
// 如果成功向chan2写入数据,则进行该case处理语句
default:
// 如果上面都没有成功,进入default处理流程
}
channel缓冲机制
创建一个带缓冲的channel
c := make(chan int, 1024)
创建了一个大小为1024的int类型channel,即使没有读取方,写入方也可以一直往channel里写入,在缓冲区被填完之前不会阻塞
从缓冲区中读取数据可以使用range关键字
for i := range c {
fmt.Println(i)
}