• 你好!欢迎你的到来
  • 关于我们
  • 首页 博客 学习笔记 技术导航 工具
  • 博文分类
    • PHP(43)
    • MySQL(11)
    • Linux(28)
    • html(3)
    • JQuery(4)
    • JavaScript(9)
    • svn(2)
    • CSS(2)
    • seajs(1)
    • go(44)
    • redis(1)
    • nginx(8)
    • mongo(0)
    • java(0)
    • 算法(0)
    • 其他(26)
    • 生活(1)
    专栏
    • Jquery基础教程
      • 文章:(15)篇
      • 阅读:18648
    • shell命令
      • 文章:(42)篇
      • 阅读:65537
    • Git教程
      • 文章:(36)篇
      • 阅读:124470
    • leetCode刷题
      • 文章:(37)篇
      • 阅读:17356
    • 摘要视图
    • 目录视图
    go语言中select {}作用
    2018-06-21 17:07 阅读(2347) 评论(0)

    一、简介

    select{}是Go中的一个控制结构,如下:

    select {
        case channel1  :
                
        case channel2  :
        
        default : 
       
    }

    类似switch,但select中,每个case必须是一个通道操作,要么是发信号,要么是接受信号。比如可以用来监听IO操作,当IO发送变化的时候,触发相应的动作。

    特点:

    1)如果有多个case满足条件,则会随机公平的选取其中一个满足条件的分支;

    2)如果没有case匹配,当有default字句,则执行default字句,若没有default子句,select将会阻塞。

    二、案例

    1、案例1

    有两个协程,根据执行完的先后顺序,来判断需要执行的代码。

    package main
    
    import (
       "time"
       "fmt"
    )
    
    func main() {
       var c1 = make(chan string)
       var c2 = make(chan string)
    
       go func() {
          time.Sleep(time.Second * 2)
          fmt.Println("c1执行ok")
          c1 <- "执行one code"
       }()
    
       go func() {
          time.Sleep(time.Second * 2)
          fmt.Println("c2执行ok")
          c2 <- "执行two code"
       }()
    
    
       select { //阻塞主进程
          case msg1 := <-c1:
             fmt.Println(msg1)
    
          case msg2 := <-c2:
             fmt.Println(msg2)
       }
    }
    本文为原创文章,请尊重辛勤劳动,如需转载,请保留本文地址
    http://www.findme.wang/blog/detail/id/477.html

    若您感觉本站文章不错,读后有收获,不妨赞助一下?

    我要赞助

    您还可以分享给朋友哦

    更多
    顶
    1
    踩
    0
    • 上一篇: go语言中格式化输出fmt包的使用
    • 下一篇: Nginx配置文件中$1,$2,$3等是什么意思
    • 查看评论
    • 正在加载中...
    • 留言
    • 亲,您还没有登录,登录后留言不需要审核哦!
      可以使用如下方式登录哦!
  • CSDN | 新浪微博 | github | 关于我们 | 我要留言 | 友链申请
  • 豫ICP备18038193号    Copyright ©lidequan All Rights Reserved