golang select

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

使用场景

  select主要用来监控多个channel,channel的数据读取,写入,关闭等事件,采用的是轮训算法

监控事件

   channel读取事件
   channel的写入事件
   channel关闭事件
   其他default

读取事件

func addNumberToChan(chanName chan int) {
for {
    chanName <- 1
    time.Sleep(1 * time.Second)
}
}
// select 监控channel的push事件
  func testReadChannel()  {
var chan1 = make(chan int, 10)
var chan2 = make(chan int, 10)
go addNumberToChan(chan1)
go addNumberToChan(chan2)
for {
    select {
    case e := <- chan1 :
        fmt.Printf("Get element from chan1: %d\n", e)
    case e := <- chan2 :
        fmt.Printf("Get element from chan2: %d\n", e)
    default:
        fmt.Printf("No element in chan1 and chan2.\n")
        time.Sleep(1 * time.Second)
    }
}
}

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

本文来自:简书

感谢作者:哈哈_dfde

查看原文:golang select

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

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