Go的100天之旅-07條件和迴圈

後廠村海盜發表於2020-07-17

條件語句

Go的條件語句和其它語言類似,主要是不支援三目運算子所以?:這種條件判斷是不支援的。Go提供的條件判斷語句主要有 if 還有 switch這兩種形式下面是

if條件語句

if的幾種寫法,基本上和其它語言是一致的

if 條件 {

} else {

}

if 條件 {

} else if 條件 {

} else {

}

switch條件語句

switch和其它語言類似,都是類似下面的寫法:

switch var1 {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

有幾點差異的地方是,預設不需要breakcase被匹配上了之後,就會進入分支,後面的case都不會匹配和執行。但是fallthrough可以強制執行下一條case,例如下面的程式碼:

package main

func main() {
	var a bool = true
	switch a {
	case true:
		println("case true 1")
		fallthrough
	case false:
		println("case false 2")
	case true:
		println("case true 3")
	}
}

輸出為:

case true 1
case false 2

case後面可以是任何型別的變數,常量,或者表示式,但是case之間的型別必須儲存一致。

迴圈語句

Go是沒有while的,它提供了兩種可以進行迴圈的操作forgoto

for迴圈

for的操作主要如下:

for 初始化;條件;執行 {

}

for 條件 {

}

for {

} //無限迴圈,可以通過break跳出

for可以通過continue執行下條迴圈,也可以break跳出迴圈。和其它語言for還有一個差異就是for range可以對陣列 Slice Map進行遍歷:

package main

func main() {
	a := [...]int{1, 2, 3}

	for i, v := range a {
		println(i, v)
	}
}

//輸出
0 1
1 2
2 3

這裡i等於值v在陣列中的下標。

goto語句

Gogoto保留了下來,它不僅僅用於迴圈,可以跳轉到一段有標籤的程式碼塊goto label
下面是一個簡單的使用:

package main

func main() {
	var a int = 0
loop:
	if a < 5 {
		a++
		println(a)
		goto loop
	}
}

輸出:

1
2
3
4
5

goto是一個比較有爭議的操作,反對使用它的人認為它會讓程式碼邏輯變得複雜,程式碼的可讀性降低。支援的人認為它可以使用靈活,更加容易擴充套件,比如出現了異常或者需要統一處理邏輯,可以用goto直接進行跳轉。

相關文章