Golang通道(Channel)

RiKaCC · 2017-12-19 11:59:00 · 2726 次点击 · 预计阅读时间 1 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2017-12-19 11:59:00 的文章,其中的信息可能已经有所发展或是发生改变。

通道(channel)

基本概念

1.什么是channel 简单来说channel就是goroutine之间消息通信机制。 2.如何创建一个channel 使用内置make函数来创建一个通道

ch := make(chan int)//ch 的类型是`chan int`

跟map一样,通道是一个使用make创建的数据结构的引用。 当赋值或者作为参数传递到一个函数的时候,复制的是引用。

主要操作

通道有两个主要操作:发送和接收,两者统称为通信。

还有第三种操作,close

由此可引发出单向通道类型。

chan_read := <-chan int   // 单向读
chan_write := chan<- int  //单向写

基本用法

举个例子说明一下channel的用法:

select {
    case <- chan1:
    // 如果chan1成功读到数据
    case chan2<- 1:
    // 如果成功向chan2写入数据

    default:
    // 默认分支
}

如果需要防止超时,需要加上:time.After()

//防止读超时
select {
    case <- time.After(time.Second*2):
        println("read channel timeout")
    case i := <- chan_read:
        println(i)
}

应用

可以通过channel来做时间控制,代码按照先后循序完成才能执行。 在读取到chan1后,才能执行B()。 A和B可能在不同的函数体力。

chan1 := make(chan int)
go A()
<- chan1
go B()

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

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