原文链接:Go Channel 详解

Channel类型

Channel类型的定义格式如下:

ChannelType = ( "chan" | "chan" "<-" | "<-" "chan" ) ElementType .

它包括三种类型的定义。可选的<-代表channel的方向。如果没有指定方向,那么Channel就是双向的,既可以接收数据,也可以发送数据。

chan T          // 可以接收和发送类型为 T 的数据
chan<- float64  // 只可以用来发送 float64 类型的数据
<-chan int      // 只可以用来接收 int 类型的数据

<-总是优先和最左边的类型结合。(The <- operator associates with the leftmost chan possible)

chan<- chan int    // 等价 chan<- (chan int)
chan<- <-chan int  // 等价 chan<- (<-chan int)
<-chan <-chan int  // 等价 <-chan (<-chan int)
chan (<-chan int)

使用make初始化Channel,并且可以设置容量:

make(chan int, 100)

容量(capacity)代表Channel容纳的最多的元素的数量,代表Channel的缓存的大小。

如果没有设置容量,或者容量设置为0, 说明Channel没有缓存,只有sender和receiver都准备好了后它们的通讯(communication)才会发生(Blocking)。如果设置了缓存,就有可能不发生阻塞, 只有buffer满了后 send才会阻塞, 而只有缓存空了后receive才会阻塞。一个nil channel不会通信。

可以通过内建的close方法可以关闭Channel。

你可以在多个goroutine从/往 一个channel 中 receive/send 数据, 不必考虑额外的同步措施。

Channel可以作为一个先入先出(FIFO)的队列,接收的数据和发送的数据的顺序是一致的。

转载于:https://www.cnblogs.com/wangjq19920210/p/11578628.html

Go Channel 详解相关推荐

  1. netty系列之:netty中的Channel详解

    文章目录 简介 Channel详解 异步IO和ChannelFuture Channel的层级结构 释放资源 事件处理 总结 简介 Channel是连接ByteBuf和Event的桥梁,netty中的 ...

  2. Netty网络编程(三):Channel详解

    文章目录 简介 Channel详解 异步IO和ChannelFuture Channel的层级结构 释放资源 事件处理 总结 简介 Channel是连接ByteBuf和Event的桥梁,netty中的 ...

  3. netty系列之:netty中各不同种类的channel详解

    文章目录 简介 ServerChannel和它的类型 Epoll和Kqueue AbstractServerChannel ServerSocketChannel ServerDomainSocket ...

  4. Java网络编程(6)NIO - Channel详解

    前言 NIO的三个核心组件:Buffer.Channel.Selector Java网络编程(4)NIO的理解与NIO的三个组件完成了大概的了解 Java网络编程(5)NIO - Buffer详解详细 ...

  5. Channel详解 通信基础入门(详细讲解通俗易懂)

    在标准的IO当中,都是基于字节流/字符流进行操作的,而在NIO中则是是基于Channel和Buffer进行操作,其中的Channel的虽然模拟了流的概念,实则大不相同. 区别 Stream Chann ...

  6. NIO详解(九):Channel详解

    1. Channel概述 Java NIO的通道类似流,但又有些不同. Channel既可以从通道中读取数据,又可以写数据到通道.但流的读写通常是单向的. Channel通道可以异步地读写. Chan ...

  7. go语言之行--golang核武器goroutine调度原理、channel详解

    一.goroutine简介 goroutine是go语言中最为NB的设计,也是其魅力所在,goroutine的本质是协程,是实现并行计算的核心.goroutine使用方式非常的简单,只需使用go关键字 ...

  8. Java NIO学习篇之通道Channel详解

    定义: Channel:通道,运输的介质,可以大致比喻成铁路的铁轨,连接着两个车站,而channel用于打开与IO设备的连接,比如磁盘,套接字等. 通道使用完需要关闭. 与传统IO的Stream比较: ...

  9. NIO中的Channel详解

    NIO的通道类似于流,但有些区别如下: •通道可以同时进行读写,而流只能读或者只能写 •通道可以实现异步读写数据 •通道可以从缓冲区(Buffer)读数据,也可以写数据到缓冲区 BIO 中的 stre ...

最新文章

  1. Servlet 传输中文乱码解决方法
  2. 产品研究:安装程序 或 移动端APP 为什么这么占用空间?
  3. android toast几种使用方法 (转)
  4. 征战蓝桥 —— 2014年第五届 —— C/C++A组第6题——扑克排序
  5. js的array.some()方法
  6. 分享几个病毒分析检测网址
  7. 虚拟机上的linux里安装ngnix,虚拟机(linux)下安装nginx的步骤教程
  8. .Net 1.1 到 .Net 2.0 开发日志
  9. SPOJ-LCS Longest Common Substring
  10. C#时间格式转换时间戳
  11. java太阳系论文摘要_毕业论文摘要
  12. 八皇后算法—java
  13. cas22112-84-1/5,10,15,20-四(4-氨基苯)-21H,23H-卟啉简称:H2TAPP; Tph
  14. PCL-ICP(IterativeClosestPoint)源码解析
  15. 【iOS】首行缩进两个字符
  16. Android加载预览PDF文件
  17. 云原生关乎文化,而不是容器
  18. Windows 7怎么让电脑定时关机?Windows 7怎么取消自动关机?
  19. 腾讯IM实战:低代码超快实现即时通讯录
  20. 外呼系统四大功能,助力企业进入智能电销时代

热门文章

  1. MySQL中group_concat()函数用法总结
  2. api可以主动采集用户数据吗_模拟量数字量采集卡之EC-8001篇
  3. linux输出mac,Linux(Mac)命令ll输出后各个字段的含义
  4. java mail urlname_javamail收发信件时,服务器,收发方的名称应该怎样设置才有效呢
  5. c语言中freopen函数,fopen和freopen_C中freopen和fopen的区别(用法+详解+区别)
  6. python利用递归函数实现斐波那契数列_Python递归及斐波那契数列
  7. 【oracle】to_date
  8. c语言复制后无法运行,刚学C语言,在Linux下写的代码能正常编译,复制到VC下就无法运行...
  9. java comparable接口作用_Java Comparable 接口
  10. python贪婪匹配和非贪婪匹配_贪婪匹配和非贪婪匹配