Go語言中的流程控制
Go語言提供了條件分支 if,狀態分支 switch,循環 for,跳轉 goto,延遲執行 defer,這些流程控制語句。分別作說明如下:
2 條件分支 if
依據條件是否滿足確定執行哪個分支。
語法:
if 條件 1 {
分支 1
} else if 條件 2 {
分支 2
} else if 條件 ... {
分支 ...
} else {
分支 else
}
流程圖:
Go是強類型,要求條件表達式嚴格返回布爾型數據!
3 狀態分支 switch
3.1 基礎
狀態分支,依據特定的狀態值進行分支判斷。
語法:
switch 分支測試表達式 { case 狀態1: 分支1 case 狀態2: 分支2 case 狀態...: 分支... default: 分支 default }
流程如下:
3.2 fallthrough,向下穿越
在其他語法(非Go,C,PHP)中,switch 有一個特定的現象,就是向下穿越,指的是一旦一個分支 case 滿足,則後續分支代碼都會被執行。而Go語言中,默認分支執行完畢,switch 執行完畢。使用 fallthrough 語法,可以達到穿越下一個 case 分支的目的。
fallthrough 需要出現在分支語句塊的最後一句!
語法:
switch 分支測試表達式 { case 狀態1: 分支1 fallthrough case 狀態2: 分支2 fallthrough default: 分支 default }
流程如下:
3.3 條件型 switch
示例代碼,邏輯與 if-else-if 一致:
score := 89
switch {
case score >= 90:
fmt.Println("優秀,不錯")
case score >= 80:
fmt.Println("還行吧")
default:
fmt.Println("呵呵")
}
個人感覺失去了 switch 分支的意義哈!
4 循環for
4.1 基本
語法格式:
for 初始化語句; 條件語句; 條件變化語句 { 循環體 } // 輸出1-10 for i := 1; i <= 10; i++ { fmt.Println(i) }
流程如下:
4.2 省略語句
Go中允許省略三個語句中的任意,就是可以形成如下的語法:
僅存在條件語句,類似其他語言的 while 結構!
for 條件語句 {
循環體
}
無限循環結構,死循環
for {
循環體
}
其他結構,三個語句可以任意省略,不再列舉:
for ; 條件語句; 條件變化語句 {
循環體
}
for 初始化語句; 條件語句; {
循環體
}
4.3 break
終止整個循環執行。
流程圖如下:
4.4 continue
終止本次循環體的繼續執行,進行循環條件變化。
流程如下:
4.5 嵌套循環
語法:
for {
for {
}
}
在使用 break,continue 時,若需要終止外層循環 for,需要配合語句標簽使用,演示如下:
userLabel:
for {
for {
break userLabel
或者
continue userLabel
}
}
額外註意,switch 在語言中,被視為執行一次的循環結構,因此 switch 中若要終止外層循環,需要使用標簽語法,不能直接 break、continue,演示如下:
userLabel:
for {
swtich variable {
case "exit"
break userLabel
或者
continue userLabel
}
}
5 goto
配合標簽完成無條件跳轉。演示如下:
if error {
goto doError
}
// 其他業務邏輯代碼略
doError:
fmt.Println(errorInfo)
6 延遲執行defer
defer 語句會將其後語句進行延遲處理。在 defer 所屬函數即將返回時,將延遲處理的語句按 defer 的逆序進行執行,也就是說,先被 defer 的語句最後被執行,最後被 defer 的語句,最先被執行。演示如下:
func main() {
fmt.Println("before defer")
defer fmt.Println("defer A")
defer fmt.Println("defer B")
defer fmt.Println("defer C")
fmt.Println("after defer")
}
以上代碼的執行結果:
before defer
after defer
defer C
defer B
defer A
defer 執行是放在一個臨時的調用棧中,因此是先入棧後出棧的。
流程圖如下:
實操時,處理互斥所時,很常用!
完!
原文出自:小韓說課
微信關註:小韓說課
Go語言中的流程控制