Go 语言条件语句

到目前为止,我们看到的 Go 程序都是从 main() 函数开始执行,然后按顺序执行该函数体中的代码。但我们经常会需要只有在满足一些特定情况时才执行某些代码,也就是说在代码里进行条件判断。针对这种需求,Go 提供了下面这些条件结构和分支结构:

select 结构

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

  1. select {
  2. case communication clause :
  3. statement(s);
  4. case communication clause :
  5. statement(s);
  6. /* 你可以定义任意数量的 case */
  7. default : /* 可选 */
  8. statement(s);
  9. }

select 语句中,每个 case 都是一个channel,所有 channel 表达式都会被求值。如果任意某个channel可以运行,则其他channel将会被忽略。

如果有多个 channel 都可以运行,Select 会随机公平地选出一个执行。其他channel将不会执行。如果所有channel都无法运行,并且有 default 子句的情况下会执行该语句。如果没有 default 子句,select 将阻塞,直到某个channel可以运行。

示例:

  1. package main
  2. import "fmt"
  3. func main() {
  4. var c1, c2, c3 chan int
  5. var i1, i2 int
  6. select {
  7. case i1 = <-c1:
  8. fmt.Printf("received ", i1, " from c1\n")
  9. case c2 <- i2:
  10. fmt.Printf("sent ", i2, " to c2\n")
  11. case i3, ok := (<-c3): // same as: i3, ok := <-c3
  12. if ok {
  13. fmt.Printf("received ", i3, " from c3\n")
  14. } else {
  15. fmt.Printf("c3 is closed\n")
  16. }
  17. default:
  18. fmt.Printf("no communication\n")
  19. }
  20. }

以上代码执行结果为:

  1. no communication

分类导航