流程控制是每種編程語言控制邏輯走向和執(zhí)行次序的重要部分,流程控制可以說是一門語言的“經(jīng)脈”。
Go語言中最常用的流程控制有if和for,而switch和goto主要是為了簡化代碼、降低重復(fù)代碼而生的結(jié)構(gòu),屬于擴(kuò)展類的流程控制。
if else(分支結(jié)構(gòu))
if條件判斷基本寫法
Go語言中if條件判斷的格式如下:

當(dāng)表達(dá)式1的結(jié)果為true時,執(zhí)行分支1,否則判斷表達(dá)式2,如果滿足則執(zhí)行分支2,都不滿足時,則執(zhí)行分支3。 if判斷中的else if和else都是可選的,可以根據(jù)實(shí)際需要進(jìn)行選擇。
Go語言規(guī)定與if匹配的左括號{必須與if和表達(dá)式放在同一行,{放在其他位置會觸發(fā)編譯錯誤。 同理,與else匹配的{也必須與else寫在同一行,else也必須與上一個if或else if右邊的大括號在同一行。
舉個例子:

if條件判斷特殊寫法
if條件判斷還有一種特殊的寫法,可以在 if 表達(dá)式之前添加一個執(zhí)行語句,再根據(jù)變量值進(jìn)行判斷,舉個例子:

思考題: 上下兩種寫法的區(qū)別在哪里?
for(循環(huán)結(jié)構(gòu))
Go 語言中的所有循環(huán)類型均可以使用for關(guān)鍵字來完成。
for循環(huán)的基本格式如下:

條件表達(dá)式返回true時循環(huán)體不停地進(jìn)行循環(huán),直到條件表達(dá)式返回false時自動退出循環(huán)。

for循環(huán)的初始語句可以被忽略,但是初始語句后的分號必須要寫,例如:

for循環(huán)的初始語句和結(jié)束語句都可以省略,例如:

這種寫法類似于其他編程語言中的while,在while后添加一個條件表達(dá)式,滿足條件表達(dá)式時持續(xù)循環(huán),否則結(jié)束循環(huán)。
無限循環(huán)

for循環(huán)可以通過break、goto、return、panic語句強(qiáng)制退出循環(huán)。
for range(鍵值循環(huán))
Go語言中可以使用for range遍歷數(shù)組、切片、字符串、map 及通道(channel)。 通過for range遍歷的返回值有以下規(guī)律:
- 數(shù)組、切片、字符串返回索引和值。
- map返回鍵和值。
- 通道(channel)只返回通道內(nèi)的值。
switch case
使用switch語句可方便地對大量的值進(jìn)行條件判斷。

Go語言規(guī)定每個switch只能有一個default分支。
一個分支可以有多個值,多個case值中間使用英文逗號分隔。

分支還可以使用表達(dá)式,這時候switch語句后面不需要再跟判斷變量。例如:

fallthrough語法可以執(zhí)行滿足條件的case的下一個case,是為了兼容C語言中的case設(shè)計(jì)的。

輸出:
a b
goto(跳轉(zhuǎn)到指定標(biāo)簽)
goto語句通過標(biāo)簽進(jìn)行代碼間的無條件跳轉(zhuǎn)。goto語句可以在快速跳出循環(huán)、避免重復(fù)退出上有一定的幫助。Go語言中使用goto語句能簡化一些代碼的實(shí)現(xiàn)過程。 例如雙層嵌套的for循環(huán)要退出時:

使用goto語句能簡化代碼:

break(跳出循環(huán))
break語句可以結(jié)束for、switch和select的代碼塊。
break語句還可以在語句后面添加標(biāo)簽,表示退出某個標(biāo)簽對應(yīng)的代碼塊,標(biāo)簽要求必須定義在對應(yīng)的for、switch和 select的代碼塊上。 舉個例子:

continue(繼續(xù)下次循環(huán))
continue語句可以結(jié)束當(dāng)前循環(huán),開始下一次的循環(huán)迭代過程,僅限在for循環(huán)內(nèi)使用。
在 continue語句后添加標(biāo)簽時,表示開始標(biāo)簽對應(yīng)的循環(huán)。例如:
