分享
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
## 通道(channel)
#### 基本概念
1.什么是channel
简单来说channel就是goroutine之间消息**通信机制**。
2.如何创建一个channel
使用内置make函数来创建一个通道
```go
ch := make(chan int)//ch 的类型是`chan int`
```
跟map一样,通道是一个使用make创建的数据结构的**引用**。
当赋值或者作为参数传递到一个函数的时候,复制的是引用。
#### 主要操作
通道有两个主要操作:发送和接收,两者统称为通信。
还有第三种操作,close
由此可引发出单向通道类型。
```go
chan_read := <-chan int // 单向读
chan_write := chan<- int //单向写
```
#### 基本用法
举个例子说明一下channel的用法:
```go
select {
case <- chan1:
// 如果chan1成功读到数据
case chan2<- 1:
// 如果成功向chan2写入数据
default:
// 默认分支
}
```
如果需要防止超时,需要加上:time.After()
```go
//防止读超时
select {
case <- time.After(time.Second*2):
println("read channel timeout")
case i := <- chan_read:
println(i)
}
```
#### 应用
可以通过channel来做时间控制,代码按照先后循序完成才能执行。
在读取到chan1后,才能执行B()。
A和B可能在不同的函数体力。
```go
chan1 := make(chan int)
go A()
<- chan1
go B()
```
有疑问加站长微信联系(非本文作者))
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信3027 次点击 ∙ 1 赞
被以下专栏收入,发现更多相似内容
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传