channel

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)
}

超时机制

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容