Hi,大家好,我是明哥,
在自己學習 Golang 的這段時間里,我寫了詳細的學習筆記放在我的個人微信公眾號 《Go編程時光》,對于 Go 語言,我也算是個初學者,因此寫的東西應該會比較適合剛接觸的同學,如果你也是剛學習 Go 語言,不防關注一下,一起學習,一起成長,
我的在線博客:http://golang.iswbm.com
我的 Github:github.com/iswbm/GolangCodingTime
Go里的流程控制方法還是挺豐富,整理了下有如下這么多種:
- if - else 條件陳述句
- switch - case 選擇陳述句
- for - range 回圈陳述句
- goto 無條件跳轉陳述句
- defer 延遲執行
上一篇講了 if -else 條件陳述句,今天先來講講 switch - case 選擇陳述句,
0. 陳述句模型
Go 里的選擇陳述句模型是這樣的
switch 運算式 {
case 運算式1:
代碼塊
case 運算式2:
代碼塊
case 運算式3:
代碼塊
case 運算式4:
代碼塊
case 運算式5:
代碼塊
default:
代碼塊
}
拿 switch 后的運算式分別和 case 后的運算式進行對比,只要有一個 case 滿足條件,就會執行對應的代碼塊,然后直接退出 switch - case ,如果 一個都沒有滿足,才會執行 default 的代碼塊,
1. 最簡單的示例
switch 后接一個你要判斷變數 education (學歷),然后 case 會拿這個 變數去和它后面的運算式(可能是常量、變數、運算式等)進行判等,
如果相等,就執行相應的代碼塊,如果不相等,就接著下一個 case,
import "fmt"
func main() {
education := "本科"
switch education {
case "博士":
fmt.Println("我是博士")
case "研究生":
fmt.Println("我是研究生")
case "本科":
fmt.Println("我是本科生")
case "大專":
fmt.Println("我是大專生")
case "高中":
fmt.Println("我是高中生")
default:
fmt.Println("學歷未達標..")
}
}
輸出如下
我是本科生
2. 一個 case 多個條件
case 后可以接多個多個條件,多個條件之間是 或 的關系,用逗號相隔,
import "fmt"
func main() {
month := 2
switch month {
case 3, 4, 5:
fmt.Println("春天")
case 6, 7, 8:
fmt.Println("夏天")
case 9, 10, 11:
fmt.Println("秋天")
case 12, 1, 2:
fmt.Println("冬天")
default:
fmt.Println("輸入有誤...")
}
}
輸出如下
冬天
3. case 條件常量不能重復
當 case 后接的是常量時,該常量只能出現一次,
以下兩種情況,在編譯時,都會報錯: duplicate case "male" in switch
錯誤案例一
gender := "male"
switch gender {
case "male":
fmt.Println("男性")
// 與上面重復
case "male":
fmt.Println("男性")
case "female":
fmt.Println("女性")
}
錯誤案例二
gender := "male"
switch gender {
case "male", "male":
fmt.Println("男性")
case "female":
fmt.Println("女性")
}
4. switch 后可接函式
switch 后面可以接一個函式,只要保證 case 后的值型別與函式的回傳值 一致即可,
import "fmt"
// 判斷一個同學是否有掛科記錄的函式
// 回傳值是布爾型別
func getResult(args ...int) bool {
for _, i := range args {
if i < 60 {
return false
}
}
return true
}
func main() {
chinese := 80
english := 50
math := 100
switch getResult(chinese, english, math) {
// case 后也必須 是布爾型別
case true:
fmt.Println("該同學所有成績都合格")
case false:
fmt.Println("該同學有掛科記錄")
}
}
5. switch 可不接運算式
switch 后可以不接任何變數、運算式、函式,
當不接任何東西時,switch - case 就相當于 if - elseif - else
score := 30
switch {
case score >= 95 && score <= 100:
fmt.Println("優秀")
case score >= 80:
fmt.Println("良好")
case score >= 60:
fmt.Println("合格")
case score >= 0:
fmt.Println("不合格")
default:
fmt.Println("輸入有誤...")
}
6. switch 的穿透能力
正常情況下 switch - case 的執行順序是:只要有一個 case 滿足條件,就會直接退出 switch - case ,如果 一個都沒有滿足,才會執行 default 的代碼塊,
但是有一種情況是例外,
那就是當 case 使用關鍵字 fallthrough 開啟穿透能力的時候,
s := "hello"
switch {
case s == "hello":
fmt.Println("hello")
fallthrough
case s != "world":
fmt.Println("world")
}
代碼輸出如下:
hello
world
需要注意的是,fallthrough 只能穿透一層,意思是它只給你一次再判斷case的機會,不管你有沒有匹配上,都要退出了,
s := "hello"
switch {
case s == "hello":
fmt.Println("hello")
fallthrough
case s == "xxxx":
fmt.Println("xxxx")
case s != "world":
fmt.Println("world")
}
輸出如下,并不會輸出 world(即使它符合條件)
hello
xxxx
系列導讀
01. 開發環境的搭建(Goland & VS Code)
02. 學習五種變數創建的方法
03. 詳解資料型別:****整形與浮點型
04. 詳解資料型別:byte、rune與string
05. 詳解資料型別:陣列與切片
06. 詳解資料型別:字典與布爾型別
07. 詳解資料型別:指標
08. 面向物件編程:結構體與繼承
09. 一篇文章理解 Go 里的函式
10. Go語言流程控制:if-else 條件陳述句
11. Go語言流程控制:switch-case 選擇陳述句
12. Go語言流程控制:for 回圈陳述句
13. Go語言流程控制:goto 無條件跳轉
14. Go語言流程控制:defer 延遲呼叫
15. 面向物件編程:介面與多型
16. 關鍵字:make 和 new 的區別?
17. 一篇文章理解 Go 里的陳述句塊與作用域
18. 學習 Go 協程:goroutine
19. 學習 Go 協程:詳解信道/通道
20. 幾個信道死鎖經典錯誤案例詳解
21. 學習 Go 協程:WaitGroup
22. 學習 Go 協程:互斥鎖和讀寫鎖
23. Go 里的例外處理:panic 和 recover
24. 超詳細解讀 Go Modules 前世今生及入門使用
25. Go 語言中關于包匯入必學的 8 個知識點
26. 如何開源自己寫的模塊給別人用?
27. 說說 Go 語言中的型別斷言?
28. 這五點帶你理解Go語言的select用法

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17399.html
標籤:Go
上一篇:golang 包結構
