ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

3.9 Go之单向通道

2022-03-21 09:37:19  阅读:201  来源: 互联网

标签:单向 timer 实例 关闭 Go 3.9 channel 通道


3.9 Go之单向通道

什么是单向通道

channel本身支持读写操作,单向通道顾名思义是指一个通道只能读或者只能写

注意:

如果一个通道只能读或者只能写将毫无意义。所以单向channel的概念只是对channel的一种使用限制

单向通道的声明格式

关键点:

<指向哪儿数据往哪儿流

var 通道实例 chan<- 元素类型 // 只能写入(箭头指向通道意思是只能流入通道)
var 通道实例 <-chan 元素类型 // 只能读取(箭头指出通道意思是只能流出通道)
  • 元素类型:通道包含的元素类型。

  • 通道实例:声明的通道变量。

单通道使用例子

package main

func main() {
   // 声明一个通道
   ch := make(chan int)
   
   // 声明一个单向通道变量--->这里面不是很理解后面的赋值是什么意思,将ch赋值给chSendOnly在实际调用变量的时候用的还是chSendOnly
   var chSendOnly <-chan int = ch

   // 声明单项只接收通道
   var cnRecvOnly chan<- int = ch
}

time包中的单向通道

timerTimer类型:

type Timer struct {
   C <-chan Time
   /*
   C通道的类型就是一种只能读取的单向通道。如果此处不进行通道方向约束,一旦外部向通道写入数据,将会造成其他使用到计时器的地方逻辑产生混乱。
   */
   r runtimeTimer
}

timer包中的计时器返回timer实例:

timer := time.NewTimer(time.Second)

优点:

单向通道有利于代码接口的严谨性

关闭channel

  • 如何关闭channel

  • 如何判断channel已经被关闭

如何关闭channel

调用go包下的close()函数:

close(ch)
如何判断channel已经被关闭
x, ok := <-ch

观察ok变量返回的布尔量即可

 

标签:单向,timer,实例,关闭,Go,3.9,channel,通道
来源: https://www.cnblogs.com/JunkingBoy/p/16033288.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有