iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
Software Development

你知道Go是什麼嗎?系列 第 9

Day9 - 流程控制 - Golang

  • 分享至 

  • xImage
  •  

講到程式一定要講流程控制的,if/elseswitch casefor loop,今天就來介紹這些流程吧

if/else

if陳述式用於根據給定的條件,決定是否應執行程式碼區塊。應該不用多做介紹,下面範例中ifelse ifelse都使用到了,應該很好懂

score := 70
if score < 60 {
    fmt.Println("failed")
} else if score < 80 {
    fmt.Println("pass")
} else {
    fmt.Println("great pass")
}
// 執行結果: pass

Switch case

if elseif能解決大部分的問題,但當需要做的判斷變多時,if else大概就像這張圖,因此出現了switch case

正常switch

下面是正常的switch寫法

index := "A"

switch index {
    case "A":
        fmt.Println("80-100")
    case "B":
        fmt.Println("70-80")
    case "C":
        fmt.Println("60-70")
    case "D":
        fmt.Println("failed")
}

output:

80-100

帶條件式switch

Go的switch也允許帶條件式,如下面的使用法

score := 75
switch {
    case score < 60:
        fmt.Println("D")
    case score > 60 && score <= 70:
        fmt.Println("C")
    case score > 70 && score <= 80:
        fmt.Println("B")
    case score > 80:
        fmt.Println("A")
}
// B

if elseswitch case沒有用哪個比較好一說,若條件少時使用if else會比較直觀,條件多用switch case則較好理解,適當前情況再決定就可。

for loop

Go當中只有for一種迴圈法,不像有些程式有forwhileuntil各種寫法,且Go中的for可以依照使用者所需決定寫法,方便很多ˊˇˋ

基礎寫法

for搭配三個參數的寫法,分別是:
for 初始值;條件;運行 {...}

for i := 0; i < 10; i++ {
    fmt.Printf("%d ", i)
}
// 執行結果: 0 1 2 3 4 5 6 7 8 9
  1. i := 0 迴圈內使用的變數,通常是i,前面沒宣告過因此要先定義
  2. i < 10 進入迴圈的條件,滿足這個條件就會進入迴圈一次
  3. i++ 每完成一次迴圈會進行的操作,通常會與第二點設的條件有關,以本例就是i++,在執行第10次後i=10,因此跳出迴圈

擬似while寫法

只有一個參數,控制變音宣告在迴圈外,for只搭配條件式,i++則寫在迴圈內,下面是範例

i := 0
for i < 10 {
    fmt.Printf("%d ", i )
    i++
}

output:

0 1 2 3 4 5 6 7 8 9

break

若某條件達到時要直接跳出迴圈,Go也提供了break的寫法,以下提供範例,若score中有滿分的就將exist設為true並跳出迴圈

func main() {
    score := []int{70, 60, 59, 30, 86, 100, 90, 53, 66, 73}
    var exist bool
    for i := 0; i < len(score); i++ {
    	if score[i] >= 100 {
    		exist = true
    		break
    	}
    }
    if exist {
    	fmt.Println("There someone got full score.")
    } else {
    	fmt.Println("Nobody got full score.")
    }
}

output:

There someone got full score.

continue

除了break直接終止迴圈外,也有continue這種跳過一次迴圈的用法,以1-50不印出7的倍數為例

func main() {
    for i := 0; i <= 50; i++ {
    	if i%7 == 0 {
    		continue
    	}
    	fmt.Print(i, " ")
    }
}

output:

1 2 3 4 5 6 8 9 10 11 12 13 15 16 17 18 19 20 22 23 24 25 26 27 29 30 31 32 33 34 36 37 38 39 40 41 43 44 45 46 47 48 50

今天大概就介紹到這,基礎部分大概就到這了吧?再來都是難產的文QQ,繼續加油


上一篇
Day8 - 常見結構 - Golang
下一篇
Day10 - 介面(interface)- Golang
系列文
你知道Go是什麼嗎?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言