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