码迷,mamicode.com
首页 > 其他好文 > 详细

golang 之 channel

时间:2017-05-14 16:56:59      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:nbsp   而不是   line   应该   als   bsp   sof   write   microsoft   

 

channel的机制是先进先出

无缓冲的channel: 如果你给channel赋值了,那么必须要读取它的值,不然就会造成阻塞。

 

chreadandwrite :=make(chan int)

chonlyread := make(<-chan int) //创建只读channel 
chonlywrite := make(chan<- int) //创建只写channel 

 有缓冲的channel: 发送方会一直阻塞直到数据被拷贝到缓冲区;

如果缓冲区已满,则发送方只能在接收方取走数据后才能从阻塞状态恢复。

 

 ch :=make(chan int,1)

 

   

  • 关于Channel的心得【摘抄】
  1. 首先,永远是符号<-进行读取或者写入,譬如v,ok := <-c是读取,而c <- v是写入。
  2. 其次,读取时,如果没有ok,也是可以读取的。不过如果closed也是能读的,没有赋值而已;如果要知道是否closed得加ok,也就是除非chan永远不关闭,否则读取应该用v,ok := <-c而不是用v := <-c的方式。
  3. 再次,不能向closed的chan写入,所以一般写入时需要用一个信号的chan(一般buffer为1),来判断是否写入或者放弃,用select判断是写入成功了,还是正在关闭需要放弃写入。
  4. 最后,如果closed后,chan有数据,ok还是true的,直到chan没有数据了才false。

 

golang 之 channel

标签:nbsp   而不是   line   应该   als   bsp   sof   write   microsoft   

原文地址:http://www.cnblogs.com/hetonghai/p/6852740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!