golang基礎學習----go語言控制語句switch
阿新 • • 發佈:2018-11-25
Go 語言 switch 語句
switch 語句用於基於不同條件執行不同動作,每一個 case 分支都是唯一的,從上直下逐一測試,直到匹配為止。。
switch 語句執行的過程從上至下,直到找到匹配項,匹配項後面也不需要再加break
基本結構
相比較 C 和 Java 等其它語言而言,Go 語言中的 switch 結構使用上更加靈活。它接受任意形式的表示式,例如:
switch var1 {
case val1:
...
case val2:
...
default:
...
}
變數 var1 可以是任何型別,而 val1 和 val2 則可以是同類型的任意值。型別不被侷限於常量或整數,但必須是相同的型別;或者最終結果為相同型別的表示式。前花括號{
您可以同時測試多個可能符合條件的值,使用逗號分割它們,例如:
case val1, val2, val3
。
每一個 case 分支都是唯一的,從上至下逐一測試,直到匹配為止。一旦成功地匹配到每個分支,在執行完相應程式碼後就會退出整個 switch 程式碼塊,也就是說你不需要特別使用 break 語句來表示結束。
Go語言裡面switch預設相當於每個case最後帶有break,匹配成功後不會自動向下執行其他case,而是跳出整個switch。
含初始化語句的switch
switch 語句的另外一種形式是包含初始化的語句,例如:
switch initialization {
case val1:
...
case val2:
...
default:
...
}
這種形式可以非常優雅地進行條件判斷:
switch result := calculate(); {
case result < 0:
...
case result > 0:
...
default:
// 0
}
fallthrough關鍵字
switch語句中,如果在執行完每個分支的程式碼後,還希望繼續執行後續分支的程式碼,可以使用fallthrough
package main
import(
"fmt"
)
func main() {
i :=2
switch i {
case 0:
fmt.Printf("0")
case 1:
fmt.Printf("1")
case 2:
fallthrough //fallthrough會強制執行後面的case程式碼
case 3:
fmt.Printf("3")
default:
fmt.Printf("Default")
}
}
以上程式碼在 i=0時輸出0,i=1時輸出1,i=2時輸出3,i=3時輸出3,其他時候便輸出Default。
綜合程式碼示例
這裡我們把上面所講的知識點串聯起來,展示下 Go 語言中變化多樣的switch語句,如下:
package main
import(
"fmt"
)
func main() {
/* local variable definition */
Num := 6
var grade string = "B"
var marks int = 90
switch {
case 0 <= Num && Num <= 3:
fmt.Println("0-3")
case 4 <= Num && Num <= 6:
fmt.Println("4-6")
case 7 <= Num && Num <= 9:
fmt.Println("7-9")
}
switch marks {
case 90: grade = "A"
case 80: grade = "B"
case 50,60,70 : grade = "C"
default: grade = "D"
}
switch {
case grade == "A" :
fmt.Println("Excellent!" )
case grade == "B", grade == "C" :
fmt.Println("Well done" )
case grade == "D" :
fmt.Println("You passed" )
case grade == "F":
fmt.Println("Better try again" )
default:
fmt.Println("Invalid grade" );
}
fmt.Println("Your grade is :", grade );
}
以上程式碼的列印結果是:
4-6
Excellent!
Your grade is : A
示例2
package main
import "fmt"
func main() {
/* 定義區域性變數 */
var grade string = "B"
var marks int = 90
switch marks {
case 90: grade = "A"
case 80: grade = "B"
case 50,60,70 : grade = "C"
default: grade = "D"
}
switch {
case grade == "A" :
fmt.Printf("優秀!\n" )
case grade == "B", grade == "C" :
fmt.Printf("良好\n" )
case grade == "D" :
fmt.Printf("及格\n" )
case grade == "F":
fmt.Printf("不及格\n" )
default:
fmt.Printf("差\n" );
}
fmt.Printf("你的等級是 %s\n", grade );
}
優秀!
你的等級是 A