Golang Channel 用法总结
之前的博客中已经粗略探究了一下 golang channel 的实现原理,本文总结一下使用 channel 的各种姿势。 先看一下对不同状态的 channel 的读,写,关闭操作的结果 1. 使用 for range 读取 channel 场景: 当需要不断从 channel 里读数据时 这是最常用的方式,又安全又便利,当channel 被关闭时,for 循环自动退出。 用法不再赘述。 2. 使用 _, ok 判断 channel 是否关闭 场景: 读 channel,但需要判断 channel 是否已关闭。 读 channel 的操作 <- chan 既可以返回一个值,也可以返回两个值,这里就是用的两个返回值的方式。 举例: if v, ok := <- ch; ok { // can read channel fmt.Println(v) } 读到数据,并且通道没有关闭时,ok 的值为 true。 通道关闭,无数据读到时,ok 的值为 false。 3. 与 select 搭配使用 场景: 需要对多个通道进行处理,或者设置超时 举例: func (h *Handler) handle(job *Job) { select { case h....