Go语言-通道的更多种类

我们在上一节所说的通道,实际上只是Go语言中的通道的一种。它被称为带缓冲的通道,或简称为缓冲通道。

通道有带缓冲和非缓冲之分。我们已经说过,缓冲通道中可以缓存N个数据。我们在初始化一个通道值的时候必须指定这个N。相对的,非缓冲通道不会缓存任何数据。发送方在向通道值发送数据的时候会立即被阻塞,直到有某一个接收方已从该通道值中接收了这条数据。非缓冲的通道值的初始化方法如下:

make(chan int, 0)

注意,在这里,给予make函数的第二个参数值是0。

除了上述分类方法,我们还可以以数据在通道中的传输方向为依据来划分通道。默认情况下,通道都是双向的,即双向通道。如果数据只能在通道中单向传输,那么该通道就被称作单向通道。我们在初始化一个通道值的时候不能指定它为单向。但是,在编写类型声明的时候,我们却是可以这样做的。例如:

type Receiver

类型Receiver代表了一个只可从中接收数据的单向通道类型。这样的通道也被称为接收通道。在关键字chan左边的接收操作符

type Sender chan

这次

var myChannel = make(chan int, 3)

var sender Sender = myChannel

var receiver Receiver = myChannel

但是,反之则是不行的。像下面这样的代码是通不过编译的:

var myChannel1 chan int = sender

单向通道的主要作用是约束程序对通道值的使用方式。比如,我们调用一个函数时给予它一个发送通道作为参数,以此来约束它只能向该通道发送数据。又比如,一个函数将一个接收通道作为结果返回,以此来约束调用该函数的代码只能从这个通道中接收数据。这属于API设计的范畴。因此我们在这里仅了解一下即可。

java 高级数据类型_【高级数据类型】- 2.通道的更多种类相关推荐

  1. datetime数据类型_系统数据类型

    1.整数型 1. 整数型数据由负整数或正整数组成,如-15. 0.5和2509. 整数型数据使用bigint.int, smallint和tinyint数据类型存储.各种类型能存储的数值的范围如下: ...

  2. java perm 查看_高级 Java 必须掌握:JVM 分析工具和查看命令,超详细

    jinfo 可以输出并修改运行时的java 进程的opts. jps 与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号. jstat 一个极强 ...

  3. java高级教程_高级Java教程

    java高级教程 课程大纲 学习Java基础很容易. 但是,真正钻研该语言并研究其更高级的概念和细微差别将使您成为一名出色的Java开发人员. 网络上充斥着"软","便宜 ...

  4. java 线程钩子_高级并发编程系列六(线程池钩子函数)

    1.考考你 国庆假期快要结束了,准备回到工作岗位的你,是不是已经开始撸起袖子敲代码,反正发完文章我就要准备去加班了,程序员就这样,有干劲对吧 那么来吧,让我们一起分享完高级并发编程系列中,线程池小节的 ...

  5. java高级计算器_高级计算器[Java版]

    import java.util.Scanner; /* * time:       2012年11月17日 11:34:10 * content:     高级计算器 * author:    覃唐 ...

  6. java 比较器类_高级编程之(Java常用类(Java比较器))

    1.使用背景: 说明:Java中的对象,正常情况下,只能进行比较 == 或 !=.不能使用 > 或 < 但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小. 如何 ...

  7. java swing列表_高级Swing——列表

    1. 列表 1.1 JList构件 JList可以将多个选项放置在单个框中.为了构建列表框,首先需要创建一个字符串数组,然后将这个数组传递给JList构造器. String[] words= { &q ...

  8. java复合数据类型_复合数据类型

    1.列表,元组,字典,集合分别如何增删改查及遍历. 答: (1)列表的增删改查: 增:使用append()方法在列表的末尾增加新的元素 删:使用del语句来删除列表的元素 改:通过下标索引找到值然后直 ...

  9. java 中国地图_高级UI-svg实现可交互的中国地图

    [TOC] 思路 第三步 利用Xml解析SVG的代码 封装成javaBean 最重要的得到Path 第四步 重写OnDraw方法 利用Path绘制中国地图 第五步 重写OnTouchEvent方法,记 ...

最新文章

  1. 西北工业大学21计算机考研,西北工业大学2018年计算机考研879专业综合考试大纲...
  2. idea卸载不干净怎么办_挡风玻璃总是洗不干净,该怎么办
  3. 面试题3:二维数组查找
  4. python pytest框架
  5. 两个经典的Oracle触发器示例
  6. 大数据时代亟需消除八大“疑云”
  7. 基本概念:线与逻辑、锁存器、缓冲器、建立时间
  8. ubuntu嵌入式linux实训报告总结,利用ubuntu建立嵌入式linux开发环境的总结
  9. Chrome 安装有道画词取义插件
  10. 1一9数字行书写法_阿拉伯数字怎么写好看(数字1到10的漂亮手写体)
  11. acer台式电脑怎么重装系统_宏基台式电脑怎么重装系统
  12. Spring启动异常之ConflictingBeanDefinitionException: Annotation-specified bean name ‘XXXXXService‘
  13. Ant实现自动打包部署
  14. bzoj4008亚瑟王
  15. Burg法求解AR(p)模型参数及MATLAB实现
  16. Proteus8.9 VSM Studio WINAVR编译器仿真ATmega16系列a09_扩展内存
  17. 机器学习预测世界杯球队冠
  18. Eclipse解决SVN版本冲突
  19. 物体检测及分类方法总结
  20. MW6208U盘量产问题

热门文章

  1. 预训练图像处理Transformer
  2. 强强联合!Papers with Code 携手 arXiv,上传论文、提交代码一步到位
  3. 漫画:垃圾男人分类图鉴
  4. 为什么,AX中存储的数据与我们日常理解相违背。
  5. 已知子网掩码如何计算IP地址中的主机位
  6. ACMNO.47 矩形面积交(有图) 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
  7. C 语言字符串分割函数 p = strtok(NULL, );
  8. 是时候了解下无监督学习了!
  9. 【OpenCV 4开发详解】均值滤波
  10. Windows 服务器操作系统安全设置加固方法