go語言學習6(流程控制和循環)

語句

舉例

if 語句

if a < 20 {

       /* 如果條件爲 true 則執行以下語句 */

       fmt.Printf("a 小於 20\n" )

   }

if...else 語句

/* 判斷布爾表達式 */

   if a < 20 {

       /* 如果條件爲 true 則執行以下語句 */

       fmt.Printf("a 小於 20\n" );

   } else {

       /* 如果條件爲 false 則執行以下語句 */

       fmt.Printf("a 不小於 20\n" );

   }

if 嵌套語句

if a == 100 {

       /* if 條件語句爲 true 執行 */

       if b == 200 {

          /* if 條件語句爲 true 執行 */

          fmt.Printf("a 的值爲 100 b 的值爲 200\n" );

       }

   }

switch 語句

switch var1 {

    case val1:

        ...

    case val2:

        ...

    default:

        ...

}

變量 var1 可以是任何類型,而 val1 val2 則可以是同類型的任意值。類型不被侷限於常量或整數,但必須是相同的類型;或者最終結果爲相同類型的表達式。

 

您可以同時測試多個可能符合條件的值,使用逗號分割它們,例如:case val1, val2, val3

Type Switch:

switch 語句還可以被用於 type-switch 來判斷某個 interface 變量中實際存儲的變量類型。

 

Type Switch 語法格式如下:

 

switch x.(type){

    case type:

       statement(s);     

    case type:

       statement(s);

    /* 你可以定義任意個數的case */

    default: /* 可選 */

       statement(s);

}

fallthrough:

使用 fallthrough 會強制執行後面的 case 語句,fallthrough 不會判斷下一條 case 的表達式結果是否爲 true。用代碼示例體會下:

package main

 

import "fmt"

 

func main() {

 

    switch {

    case false:

            fmt.Println("1case 條件語句爲 false")

            fallthrough

    case true:

            fmt.Println("2case 條件語句爲 true")

            fallthrough

    case false:

            fmt.Println("3case 條件語句爲 false")

            fallthrough

    case true:

            fmt.Println("4case 條件語句爲 true")

    case false:

            fmt.Println("5case 條件語句爲 false")

            fallthrough

    default:

            fmt.Println("6、默認 case")

    }

}

輸出結果爲:

2case 條件語句爲 true

3case 條件語句爲 false

4case 條件語句爲 true

從以上代碼輸出的結果可以看出:switch 從第一個判斷表達式爲 true case 開始執行,如果 case 帶有 fallthrough,程序會繼續執行下一條 case,且它不會去判斷下一個 case 的表達式是否爲 true

select 語句

select Go 中的一個控制結構,類似於用於通信的 switch 語句。每個 case 必須是一個通信操作,要麼是發送要麼是接收。

 

select 隨機執行一個可運行的 case。如果沒有 case 可運行,它將阻塞,直到有 case 可運行。一個默認的子句應該總是可運行的。

語法如下:

select {

    case communication clause  :

       statement(s);     

    case communication clause  :

       statement(s);

    /* 你可以定義任意數量的 case */

    default : /* 可選 */

       statement(s);

}

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

 

每個 case 都必須是一個通信

所有 channel 表達式都會被求值

所有被髮送的表達式都會被求值

如果任意某個通信可以進行,它就執行,其他被忽略。

如果有多個 case 都可以運行,Select 會隨機公平地選出一個執行。其他不會執行。

否則:

如果有 default 子句,則執行該語句。

如果沒有 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")

   }   

}

Go語言中循環採用for語句(沒有while,for替代),有如下三種定義方式:

1. for init; condition; post { }

    init爲初始條件;condition: 關係表達式或邏輯表達式,循環控制條件;post: 一般爲賦值表達式,給控制變量增量或減量

2. for condition { }

    同C語言的while語句一樣

3.for { }

死循環,同for(;;)

另外,可以採用for循環的range格式對slice、map、數組和字符串等進行循環遍歷,如

for key, value := range oldMap {

newMap[key] = value

}

break、continue、goto的用法同c語言

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章