Golang通道(Channel)

RiKaCC · · 2512 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

## 通道(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

2512 次点击  ∙  1 赞  
加入收藏 微博
被以下专栏收入,发现更多相似内容
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传