GoLang - if, switch, for, goto 流程控制介紹

Golang - if, switch, for, goto

在這幾篇,會以 Go 語言的入門基礎進行逐步說明,本篇針對各種流程控制進行說明

流程控制主要可區分為 判斷條件(if, switch), 循環控制(for), 跳躍控制(goto),在這裡我們會陸續遮頓這三種類別進行介紹

If - 判斷條件

在 Go 語言的 if 判斷式不需要加 “( )” 括弧,因此基本判斷式格式如下:

if age > 10 {
	fmt.Println("x > 10")
}else{
	fmt.Println("x <= 10")
}

多條件判斷寫法如下:

if age > 10 {
	fmt.Println("x > 10")
} else if age == 10 {
	fmt.Println("x = 10")
} else {
	fmt.Println("x < 10")
}

switch - 判斷條件

switch 判斷式語法,執行過程會從上而下,逐步依照運算式比對結果,若沒有運算式則預設 true

在 Go 的 switch 預設都會自動在 case 帶上 break

package main

import "fmt"

func main() {
  productStatus := 2
  var title string
  switch productStatus {
  case 1:
    title = "normal"
  case 2, 3, 4, 5:
    title = "season"
  case 6:
    title = "sales"
  default:
    title = "none"
  }

  fmt.Println(title)
}

//output season

如果不想強制使用 break,則可以使用 fall through 不執行 break

package main

import "fmt"

func main() {
  productStatus := 2
  var title string
  switch productStatus {
  case 1:
    title = "normal"
    fallthrough
  case 2, 3, 4, 5:
    title = "season"
    fallthrough
  case 6:
    title = "sales"
    fallthrough
  default:
    title = "none"
  }

  fmt.Println(title)
}

//output none

for - 迴圈控制

基本回圈:

針對 for 迴圈,基本架構如下

for expression1, expression2, expression3{

}

expression1, expression3 宣告變數或函數呼叫回傳值,expression2 則是條件判斷。

直接從範例理解會比較容易懂,以下是一個簡單的 for 迴圈範例

  for i := 0; i < 10; i++ {
    fmt.Println(i)
  }

//output 0 1 2 3 4 5 6 7 8 9

也可省略其中欄位,例如 _

在這裡,可能有人會有疑問,這裡怎麼只介紹 for ,而沒有提到 while 語法? (其他語言可用 while 來進行回圈控制)

其實,在 go 語言直接把 while 作法可直接在 for 進行類似的實作,直接省略掉";“即可,例如:

CVT2HUGO: 捨棄不需要的回傳
var i int = 0
for i < 10 {
  fmt.Println(i)
  i++
}

//output 0 1 2 3 4 5 6 7 8 9

跳脫回圈:

for 在進行過程中,可以透過 break

CVT2HUGO: , ```continue```
  for i := 0; i < 10; i++ {
 		if i<2 {
 			continue
 		}
 		if i>=5 {
 			break
 		}
    fmt.Println(i)
  }

//output 2 3 4

CVT2HUGO: 來進行跳脫, break 會直接結束整個循環,continue 則是略過本次循環。

讀取 array, slide與map

package main

import "fmt"

func main() {
  m := map[string]string{
    "one":   "adam",
    "two":   "avedon",
    "three": "auth",
  }
  for k, v := range m {
    fmt.Println(k, v)
  }
  
  a := []string{"Foo", "Bar"}
  for i, s := range a {
      fmt.Println(i, s)
  }
}

goto - 跳躍控制

goto 可以無條件地讓條件轉移到指定的地方,在介紹前特別提醒,請善用,避免造成系統邏輯混亂的問題。

通常,在特定情況下,可以透過 goto 來進行條件轉移、構成循環監聽、或跳出循環。

只要定義 label ,就可用 goto label 進行跳躍,基本格式如下:

lable: statement;

goto lable;

例如

package main

import "fmt"

func main() {
  a := 1

	HI_LABLE: if a < 11 {
    a = a + 1
    goto HI_LABLE
  }

  fmt.Println(a)
}

//output 11