golang channel这种方式的优点是通过提供原子的通信原语,避免了竞态情形(race condition)下复杂的锁机制。

channel

channel 是可以让一个 goroutine 发送特定值到另一个 gouroutine 的通信机制。 (推荐学习:go)

可以理解为某种类型的值传递的导管,而这种在 channel 中传递的类型成为 channle 的 element type 元素类型。

一个使用make创建的,对数据结构的引用,当把 channel 作为参数使用时,实际上是传引用调用

channel 的零值: nil

channel 可以看成一个 FIFO 队列,对 FIFO 队列的读写都是原子的操作,不需要加锁。对 channel 的操作行为结果总结如下:

go-1.png

读取一个已关闭的 channel 时,总是能读取到对应类型的零值,为了和读取非空未关闭 channel 的行为区别,可以使用两个接收值:

// ok is false when ch is closedv, ok := <-ch

golang 中大部分类型都是值类型(只有 slice / channel / map 是引用类型),读/写类型是值类型的 channel 时,如果元素 size 比较大时,应该使用指针代替,避免频繁的内存拷贝开销。

更多相关文章

  1. golang如何判断数据类型
  2. golang数据类型有哪些
  3. golang 如何类型转换
  4. go语言数据类型转换教程
  5. golang怎么把字符串转成Int类型
  6. golang判断错误类型的方法
  7. 详解 Go 中的不可变类型
  8. 总结 Go 的数据类型
  9. 详解Golang中函数作为值与类型

随机推荐

  1. 【同说】@曼青:前端折腾之路
  2. 数组的认识
  3. 【一看】看图说话之瓶颈
  4. 不懂为什么,突然想写一写这篇文章
  5. Android(安卓)Studio解决依赖文件冲突
  6. 【第765期】你不懂JS:this豁然开朗!
  7. 【第766期】你不懂JS:对象
  8. No.8 bin和sbin的区别
  9. 聊聊“干货”
  10. 【第767期】你不懂JS:混合(淆)“类”的对象