Go语言 select 语句


Go语言 select 语句

Go语言条件语句

select是Go中的一个控制结构,类似于用于通信的switch语句。

每个case必须是一个通信操作,要么是发送要么是接收。

select随机执行一个可运行的case。

如果没有case可运行,它将阻塞,直到有case可运行。

一个默认的子句应该总是可运行的。

语法

Go 编程语言中 select 语句的语法如下:

select {
    case communication clause  :
       statement(s);      
    case communication clause  :
       statement(s); 
    /* 你可以定义任意数量的 case */
    default : /* 可选 */
       statement(s);
}

以下描述了 select 语句的语法:

· 每个case都必须是一个通信

· 所有channel表达式都会被求值

· 所有被发送的表达式都会被求值

· 如果任意某个通信可以进行,它就执行;其他被忽略。

· 如果有多个case都可以运行,Select会随机公平地选出一个执行。其他不会执行。

    否则:

            1、如果有default子句,则执行该语句。

            1、如果没有default字句,select将阻塞,直到某个通信可以运行;Go不会重新对channel或值进行求值。

package main

import "fmt"

func main() {
   var c1, c2, c3 chan int
   var i1, i2 int
   select {
      case i1 = <-c1:
         fmt.Printf("received ", i1, " from c1\n")
      case c2 <- i2:
         fmt.Printf("sent ", i2, " to c2\n")
      case i3, ok := (<-c3):  // same as: i3, ok := <-c3
         if ok {
            fmt.Printf("received ", i3, " from c3\n")
         } else {
            fmt.Printf("c3 is closed\n")
         }
      default:
         fmt.Printf("no communication\n")
   }    
}

以上代码执行结果为:

no communication

Go 语言条件语句>>

相关阅读 >>

手撸Golang 基本数据结构与算法 二叉查找树

手撸Golang 行为型设计模式 责任链模式

[concurrent-map]-并发map在Go中的使用

(一)Gof 通过epoll模型管理连接

Go在谷歌:以软件工程为目的的语言设计

Golang 自然语言处理工具(Gohanlp)

Golang基础-单元测试与mock

使用gin封装一个web脚手架(八):限流器

26 Goroutine channel实现并发和并行(三)

Go中sync.mutex源码解读

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...