- 介绍
- 标记
- 源码表示法
- 词汇元素
- 常量
- 变量
- 类型
- 方法集
- 布尔类型
- 数字类型
- 字符串类型
- 数组类型
- 切片类型
- 结构体类型
- 指针类型
- 函数类型
- 接口类型
- Map 类型
- Channel 类型
- 类型的属性和值
- 代码块
- 声明和作用域
- 标签的作用域
- Iota
- 类型声明
- 变量声明
- 短变量声明
- 函数声明
- 方法声明
- 表达式
- 语句
- switch 语句
- for 语句
- Go 语句
- select 语句
- return 语句
- break 语句
- continue 语句
- goto 语句
- Fallthrough 语句
- Defer 语句
- 内置函数
- Close
- 长度和容积
- 内存分配
- 创建切片、map 和 管道
- 追加或者拷贝切片
- 删除 map 中的元素
- 操作复数
- 处理 panic
- 初始化
- 程序的初始化和执行
- 系统相关
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
Channel 类型
channel 提供一种手段在并发执行的函数间发送和接收指定类型的值。没有初始化的 channel 是 nil。
ChannelType = ( "chan" | "chan" "<-" | "<-" "chan" ) ElementType .
操作符 <-
可以指定 channel 的数据流动方向。如果没有指定方向,channel 默认是双向的。channel 可以通过转换和赋值来限制只读和只写。
chan T // 可以接收和发送 T 类型的数据
chan<- float64 // 只能发送 float64 类型的值
<-chan int // 只能接收
<-
与最左侧的 chan
关联:
chan<- chan int // 等价于 chan<- (chan int)
chan<- <-chan int // 等价于 chan<- (<-chan int)
<-chan <-chan int // 等价于 <-chan (<-chan int)
chan (<-chan int)
可以通过内置的 make
函数初始化 channel。 make
函数可以指定 channel 的类型和容量。
make(chan int, 100)
容量是设置了最大能缓存元素的数量。如果没有设置容量或值为 0,channel 就是没有缓存的,这时只有当发送者和接收者都准备好后才会传输数据。而带缓存的 channel 在缓存没有满的时候依然可以成功发送数据,当缓存不为空的时候可以成功接收到数据,值为 nil 的 channel 不能传输数据。
可以通过内置函数 close
关闭 channel。在接收端的第二个返回值可以用来提示接收者在关闭的 channel 是否还包含数据。
channel 可以在发送语句,接收操作中使用。可以不考虑同步性直接在多个 goroutine 中对 channel 调用内置函数 len
和 cap
。channel 的行为和 FIFO 队列相同。举个例子,一个 goruntine 发送数据,另一个 goruntine 接收他们,接收数据的顺序和发送数据的顺序是相同的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论