Go的條件判斷語句的使用

陳九禮發表於2020-10-23

現實時間中,我們如果想去購物,可以選擇網上或者線下去購物,甚至說,要購買的物品都有許多選擇,選價格便宜的,選質量好的,選不用運費等等

那麼在計算機語言中,我們要怎麼實現現實中,這些選擇呢?

Go語言支援了幾種條件判斷語句,if 語句和switch語句

if 語句

單分支結構

格式

if 條件表示式 {
		程式碼塊
}

程式碼示例

package main

import "fmt"

func main(){

	var shopping int = 1 //網上購物的編號為1,線下購物的編號為2

 	//當 shopping == 1的時候,選擇網上購物
	if shopping == 1 {
		fmt.Println("選擇網上購物,此時shopping的值為:", shopping)
	}

	//當 shopping == 2的時候,選擇線下購物
	if shopping == 2 {
		fmt.Println("選擇線下購物,此時shopping的值為:", shopping)
	}
}

輸出為:選擇網上購物,此時shopping的值為: 1

在這裡,我們定義了一個變數 shopping,並賦值為1,這時候執行程式碼,程式碼會先判斷第一個 if 語句,也就是 shopping == 1 這個條件表示式所在的 if 條件句,由於符合條件,所以進入程式碼塊中;執行完程式碼塊後,程式會繼續向下執行,這時候會遇到第二個 if 語句,然後判斷 shopping是否等於2,由於shopping等於1,不符合條件,所以不進入程式碼塊中,所以不輸出,至此程式執行結束。

注意:如果第二個 if 語句的條件表示式也符合 shopping == 1的話,會進入if 程式碼塊中執行程式碼塊的內容

執行過程

在這裡插入圖片描述

多分支結構

格式

if 條件表示式 {
		程式碼塊
}else {
		程式碼塊
}

--------------------------------------

if 條件表示式{
		程式碼塊
}else if 條件表示式{
		程式碼塊
}else{
		程式碼塊
}

程式碼示例

package main

import "fmt"

func main(){

	var shopping int = 2 //網上購物的編號為1,其它編號都是線下購物

	//當 shopping == 1的時候,選擇網上購物
	//當 shopping != 1的時候,選擇線下購物
	if shopping == 1 {
		fmt.Println("選擇網上購物,此時shopping的值為:", shopping)
	}else{
		fmt.Println("選擇線下購物,此時shopping的值為:", shopping)
	}

}

輸出:選擇線下購物,此時shopping的值為: 2

程式碼執行到 if 語句這裡後,判斷條件是否成立,如果成立,執行程式碼塊的程式碼;如果不成立,執行 else 語句中的內容,也就是說,除了 shopping == 1 這個條件成立會執行 **“選擇網上購物”**外,其它數字的輸入,都會走到 else語句

package main

import "fmt"

func main(){

	var shopping int = 3 //網上購物的編號為1,線下購物的編號為2,其它的都不去購物

	//當 shopping == 1的時候,選擇網上購物
	//當 shopping == 2的時候,選擇線下購物
	if shopping == 1 {
		fmt.Println("選擇網上購物,此時shopping的值為:", shopping)
	}else if shopping == 2{
		fmt.Println("選擇線下購物,此時shopping的值為:", shopping)
	}else {
		fmt.Println("不去購物了,在家躺屍比較舒服")
	}

}

輸出:不去購物了,在家躺屍比較舒服

上面的語句,較 if…else 語句而言,多了 else if 語句,可以讓程式多個選擇。當執行到第一個 if 語句 shopping == 1的,由於條件不成立,繼續向下執行,執行到 else if 語句,這個語句的條件是 shopping == 2,也不成立,執行 else 語句中的程式碼

如果有多個 else if 語句,那麼只要前面的不匹配,就會執行下面的 else if,直到沒有 else if為止,那麼久執行 else

執行過程

第一份程式碼的圖

在這裡插入圖片描述

第二份程式碼的圖

在這裡插入圖片描述

巢狀分支結構

程式碼示例

package main

import "fmt"

func main(){

	//宣告三個個變數,分別代表了數學成績,英語成績還有年齡
	var mathScore int = 88
	var englishScore int = 90
	var age int = 18

	//只要有一個科目的成績在90分以上就評為優秀,這時候要是年齡小於等於18,那麼可以多個獎狀
	if mathScore >= 90 || englishScore >= 90{
		fmt.Println("優秀")

		if age <= 18 {
			fmt.Println("獎勵獎狀一張")
		}
	} else {
		fmt.Println("幹什麼吃的,沒一科考到90+")
	}
}

輸出:優秀(此處在列印的時候,是有換行的)獎勵獎狀一張

巢狀分支,其實跟其它分支是差不多的,它只是在分支裡面,還巢狀了條件判斷語句

switch 語句

Go中的 switch語句,跟其它語句還是略有些區別的:

  • 執行完 case 後,不用呼叫 break關鍵字,來讓程式跳出 switch 語句,因為在每個case後面,都會預設加一個 break關鍵字

  • 要想匹配完一個語句後,繼續執行下面的case,只要使用關鍵字 fallthrough即可,無論下面的case是否匹配上,都會執行 fallthrough語句下面的 case中的內容

  • case 後面的型別,要跟 switch中的型別匹配,下面程式碼的 expr的型別要保持一致

    switch expr {
    	case expr
    }
    
  • default 在這裡可有可無

  • switch 後面可以是任意型別

程式碼示例

不帶 fallthrough關鍵字

package main

import "fmt"

func main() {

	//定義一個變數,來代表成績
	var score int64 = 90

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

輸出結果:優秀

帶 fallthrough關鍵字

package main

import "fmt"

func main() {
	
	//定義一個變數,來代表成績
	var score int64 = 99

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

輸出:優秀(此處在列印的時候,是有換行的)良好

是不是很奇怪,明明 fallthrough後面的case條件明明不匹配,但他就是執行了,可能是因為名字中有 through這個詞的原因吧,表示穿過(這個是我瞎說的,不要當真)

補充

if 和 switch語句後面可以帶個初始化語句,如下

package main

import "fmt"

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

分號後面,才是下面要 switch後面要跟的型別,而 if語句中的初始化也是跟這個一樣


歡迎大家關注下個人的「公眾號」:獨醉貪歡

相關文章