判斷式
在分支判斷的控制上,Go 提供了 if…else、switch 語法,相較於其他提供類似語法的語言,例如 : c、c# 、java 等。
題外話 python 是沒有switch case必須要自己手動創建出來。
輸入方式
這章節會需要用到輸入,請各位參考下方輸入方法:
1 | var number int |
IF 敘述
GO語言當中是無法使用單行可捨棄括號的敘述,優點會知道if範圍在哪。
go特性是此判斷式可以不用使用括號。
1 | package main |
IF ELSE敘述
Go語言對IF…ELSE敘述中,看出ELSE前面必須要有{} 相對嚴謹。對於IF….ELSE IF …ELSE也是相同意思。
1 | package main |
switch 語法
1 | package main |
注意,與 C/C++ 或 Java 等語言不同的是,Go 的 switch 比對成功後,不會自動往下執行,因而不用撰寫 break,有多個條件想符合時,在同一 case 中使用逗號區隔。如果真的想在比對成功後,往下一個 case 中的陳述執行,可以使用 fallthrough,例如 :
1 | package main |
在上面的例子中,如果沒有 fallthrough,那麼只會顯示 “滿分喔!“,而不會執行 case 9 中的 level = ‘A’,因此最後顯示得分等級時,不會有 A 的字眼。在上頭也可以看到,switch 中也可以使用 := 宣告與初始變數。
實際上,Go 的 switch 中, case 不用是常數,只要 switch 的值型態與 case 比對的型態符合,也可以是個變數或運算式,甚至還可以接受布林運算式,例如:
1 | package main |
迴圈
使用迭代控制結構 (iteration control structure) 來達成反覆 (repeating) 或循環 (looping) 的行為,省下重覆的程式碼。
條件句 (conditional)
做為迴圈終止條件。在這個 for 迴圈中,只要 cond 為真,for 區塊內的程式碼就會不間斷地反覆執行。
當 cond 不為真時,則 for 區塊會終止。我們會透過改變程式的狀態,讓 for 迴圈執行一定次數後停止。
使用方式如同 while 一樣 。
🧙♂️ 使用方式:
1 | for conditional { |
使用範例
1 | package main |
計數器 (counter loop)
for 迴圈使用計數器 (counter) 來做為迴圈的中止條件。當執行迴圈結構開端時,會檢查判斷是否是對的,就會去做執行。
🧙♂️ 使用方式:
1 | for 初始值; 範圍 ; 動作 { |
使用範例
1 | package main |
無限迴圈 Infinite loop
其中範例除外[無限迴圈],以下範例為infinite loop
🧙♂️ 使用方式:
1 | for { |
例子中,for 迴圈會無限次地執行。這樣的迴圈稱為無限迴圈 (infinite loop)。
在 Go 語言使用無限迴圈時,會搭配 break 來終止迴圈。若要繼續執行就會使用 continue。
For 範圍迴圈 For range loop
使用陣列時候,可以使用range 取得陣列的長度。
🧙♂️ 使用方式:
1 | package main |
Break、Continue、goto
一般情況是會在違反進入迴圈的限制條件時候,才會結束迴圈運作,若問題是重複執行特定某些的敘述特性外,包刮例外特性必須加上break 或是continue 之敘述,可以方便撰寫程式。
break 敘述功能使用方式
break 敘述除了在 switch 的選擇結構外,可以使用在迴圈結構。當執行到break 時候,會跳出程式迴圈結構,並在迴圈外層第一行敘述去做執行。
1 | package main |
continue 敘述功能使用方式
continue 是不執行迴圈內部某些敘述。
在 for 迴圈結構內使用continue 執行到continue 會跳到該層的for迴圈內的第三部分,做迴圈變數增/減量。
1 | func main() { |
goto 敘述功能使用方式
可以使用 goto 任意移動到同函式中其他位置。像是以下範例用 goto 模擬 break:
1 | package main |
當 i % 2 餘數為 0 ,會觸發 goto 敘述,跳到 END 標籤所在的位置。goto也可以當continue 如以下範例。
1 | package main |
有些程式人視 goto 為邪惡的語法特性,甚至有些程式語言直接封印 goto。但適當地使用 goto,會讓程式碼更簡潔。