天天看點

Go語言之流程控制

程式的流程控制決定了程式是如何執行的,主要有三大流程控制:

  • 順序控制
  • 分支控制
  • 循環控制

一、順序控制

順序控制時最簡單的一種流程控制,強調代碼從上到下依次執行,中間沒有任何順序和跳轉。注意的是Go語言中變量采用前向引用。如:

func main() {
    var a int = 1 // 聲明變量a
    var b int = a  //使用變量a
    fmt.Println(b)

}              

 上面就是先定義變量再使用,是正确的做法,相反如果先使用a而後再定義a就是錯誤的方法。

二、分支控制

 分支控制就是讓程式有選擇的執行,主要分為三類:

  • 單分支
  • 雙分支
  • 多分支

(一)單分支

1、基本文法

if <condition> {
    // 執行代碼塊
  
}      

2、執行個體

package main

import "fmt"

func main() {
    a := 10

    if a > 5 {
        fmt.Println("大于5")
    }

}      

(二)雙分支控制

if <condition> {
    // 執行代碼塊
  
} else {
   // 執行代碼塊
}      

package main

import "fmt"

func main() {
    a := 10

    if a > 5 {
        fmt.Println("大于5")
    } else {
        fmt.Println("小于等于5")
    }

}      

(三)多分支控制

if <condition1> {
    // 執行代碼塊1
  
} else if <condition2> {
   // 執行代碼塊2

} else {
   // 執行代碼塊3

}      

  先判斷條件1是否成立,如果為真就執行代碼塊1;如果條件1為假就去判斷條件2是否成立,如果條件2為真,就執行代碼塊2;如果所有的條件都不為真就執行else中的代碼塊。

  多分支隻能有一個執行入口。

package main

import "fmt"

func main() {
    a := 10

    if a < 5 {
        fmt.Println("小于5")
    } else if a >= 5 && a < 10{
        fmt.Println("大于等于5并且小于10")
    } else {
        fmt.Println("大于10")

    }

}      

(四)嵌套分支

在一個分支結構中完整的嵌套另一個完整的分支結構,裡面的分支結構被稱為内層分支,外面的分支結構被稱為外層分支。

  • 基本文法

if <condition1> {
     
    if <condition1.1> {
  
    } else {

       }
    
}  
...      

三、switch分支控制

switch語句用于基于不同條件執行不同的動作,每一個case分支都是唯一的,從上到下逐一測試,直到比對為止。比對項後面不需要再加break.

package main

import "fmt"

func main() {
    
    switch <condition> {
        case <condition1>,<condition2>...:
            // 代碼塊1

        case <condition3>,<condition4>...:
            // 代碼塊2
        ...
        default:
            // 代碼塊3
    }


}      
  • switch執行流程是,限制性condition,得到值,然後和case的表達式進行比較,如果相等就比對到,然後執行對應的case代碼塊,然後退出switch控制
  • 如果switch表達式的值與任何的case表達式沒有比對成功,就執行default代碼塊,執行後退出switch流程控制
  • Go語言中case後的表達式可以有多個,中間使用逗号隔開
  • Go語言中case代碼塊中不需要使用break,因為預設會存在,當執行完case代碼塊中就會之間退出switch控制

package main

import "fmt"

func main() {
    
    score := 90

    switch {
        case score >= 90:
            fmt.Println("優秀...")

        case score >= 80 && score < 90:
            fmt.Println("良好...")
        default:
            fmt.Println("一般...")
    }


}      

 另外也可以直接在switch後直接定義變量:

package main

import "fmt"

func main() {
    
    switch score := 90; {
        case score >= 90:
            fmt.Println("優秀...")

        case score >= 80 && score < 90:
            fmt.Println("良好...")
        default:
            fmt.Println("一般...")
    }


}      

如果在case代碼塊中添加fallthrough會進行穿透,會執行下一個case,預設穿透一層。

package main

import "fmt"

func main() {
    
    switch score := 90; {
        case score >= 90:
            fmt.Println("優秀...")
            fallthrough // 優秀...良好...      
case score >= 80 && score < 90:
            fmt.Println("良好...")
            
        default:
            fmt.Println("一般...")
    }


}      

3、switch與if比較

  • 如果判斷的具體數值不多,建議使用switch語句
  • 對區間判斷為bool類型,建議使用if語句

四、循環控制

Go語言之循環控制 - iveBoy - 部落格園 (cnblogs.com)

作者:iveBoy

出處:http://www.cnblogs.com/shenjianping/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文連接配接,否則保留追究法律責任的權利。

go