Go Channel 详解
原文链接: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 详解相关推荐
- netty系列之:netty中的Channel详解
文章目录 简介 Channel详解 异步IO和ChannelFuture Channel的层级结构 释放资源 事件处理 总结 简介 Channel是连接ByteBuf和Event的桥梁,netty中的 ...
- Netty网络编程(三):Channel详解
文章目录 简介 Channel详解 异步IO和ChannelFuture Channel的层级结构 释放资源 事件处理 总结 简介 Channel是连接ByteBuf和Event的桥梁,netty中的 ...
- netty系列之:netty中各不同种类的channel详解
文章目录 简介 ServerChannel和它的类型 Epoll和Kqueue AbstractServerChannel ServerSocketChannel ServerDomainSocket ...
- Java网络编程(6)NIO - Channel详解
前言 NIO的三个核心组件:Buffer.Channel.Selector Java网络编程(4)NIO的理解与NIO的三个组件完成了大概的了解 Java网络编程(5)NIO - Buffer详解详细 ...
- Channel详解 通信基础入门(详细讲解通俗易懂)
在标准的IO当中,都是基于字节流/字符流进行操作的,而在NIO中则是是基于Channel和Buffer进行操作,其中的Channel的虽然模拟了流的概念,实则大不相同. 区别 Stream Chann ...
- NIO详解(九):Channel详解
1. Channel概述 Java NIO的通道类似流,但又有些不同. Channel既可以从通道中读取数据,又可以写数据到通道.但流的读写通常是单向的. Channel通道可以异步地读写. Chan ...
- go语言之行--golang核武器goroutine调度原理、channel详解
一.goroutine简介 goroutine是go语言中最为NB的设计,也是其魅力所在,goroutine的本质是协程,是实现并行计算的核心.goroutine使用方式非常的简单,只需使用go关键字 ...
- Java NIO学习篇之通道Channel详解
定义: Channel:通道,运输的介质,可以大致比喻成铁路的铁轨,连接着两个车站,而channel用于打开与IO设备的连接,比如磁盘,套接字等. 通道使用完需要关闭. 与传统IO的Stream比较: ...
- NIO中的Channel详解
NIO的通道类似于流,但有些区别如下: •通道可以同时进行读写,而流只能读或者只能写 •通道可以实现异步读写数据 •通道可以从缓冲区(Buffer)读数据,也可以写数据到缓冲区 BIO 中的 stre ...
最新文章
- Servlet 传输中文乱码解决方法
- 产品研究:安装程序 或 移动端APP 为什么这么占用空间?
- android toast几种使用方法 (转)
- 征战蓝桥 —— 2014年第五届 —— C/C++A组第6题——扑克排序
- js的array.some()方法
- 分享几个病毒分析检测网址
- 虚拟机上的linux里安装ngnix,虚拟机(linux)下安装nginx的步骤教程
- .Net 1.1 到 .Net 2.0 开发日志
- SPOJ-LCS Longest Common Substring
- C#时间格式转换时间戳
- java太阳系论文摘要_毕业论文摘要
- 八皇后算法—java
- cas22112-84-1/5,10,15,20-四(4-氨基苯)-21H,23H-卟啉简称:H2TAPP; Tph
- PCL-ICP(IterativeClosestPoint)源码解析
- 【iOS】首行缩进两个字符
- Android加载预览PDF文件
- 云原生关乎文化,而不是容器
- Windows 7怎么让电脑定时关机?Windows 7怎么取消自动关机?
- 腾讯IM实战:低代码超快实现即时通讯录
- 外呼系统四大功能,助力企业进入智能电销时代
热门文章
- MySQL中group_concat()函数用法总结
- api可以主动采集用户数据吗_模拟量数字量采集卡之EC-8001篇
- linux输出mac,Linux(Mac)命令ll输出后各个字段的含义
- java mail urlname_javamail收发信件时,服务器,收发方的名称应该怎样设置才有效呢
- c语言中freopen函数,fopen和freopen_C中freopen和fopen的区别(用法+详解+区别)
- python利用递归函数实现斐波那契数列_Python递归及斐波那契数列
- 【oracle】to_date
- c语言复制后无法运行,刚学C语言,在Linux下写的代码能正常编译,复制到VC下就无法运行...
- java comparable接口作用_Java Comparable 接口
- python贪婪匹配和非贪婪匹配_贪婪匹配和非贪婪匹配