Go select 語句

衣舞晨風發表於2017-12-03

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子句,則執行該語句。
    2. 如果沒有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

原文地址: http://www.runoob.com/go/go-select-statement.html?from=timeline


個人微信公眾號:



作者:jiankunking 出處:http://blog.csdn.net/jiankunking




相關文章