博客 / 詳情

返回

Golang基礎筆記六之流程控制

本文首發於公眾號:Hunter後端

原文鏈接:Golang基礎筆記六之流程控制

本篇筆記介紹 Golang 裏流程控制相關的一些語法,以下是本篇筆記目錄:

  1. 條件語句
  2. 循環語句

1、條件語句

1. if-else 語句

if-else 語句的基本語法如下:

if condition {
}else if condition {
}else {
}

下面是一個示例:

num := 10
if num <= 5 {
    fmt.Println("num 小於等於 5")
} else if num > 5 && num <= 10 {
    fmt.Println("num 大於 5 小於等於 10")
} else {
    fmt.Println("num 大於 10")
}

if 語句中,還可以包含一個初始化語句,用於條件判斷之前執行一些操作:

if num := 10; num <= 5 {
    fmt.Println("num 小於等於 5")
} else if num > 5 && num <= 10 {
    fmt.Println("num 大於 5 小於等於 10")
} else {
    fmt.Println("num 大於 10")
}

注意:這裏 num 這個變量的作用域僅限於 if-else 塊。

這裏的 if-else 語句,除了最開始的 if 語句是必需的外,後面的 else-if 和 else 模塊都是可選的。

2. switch 語句

switch 語句有兩種形式,一種是表達式 switch,一種是類型 switch。

1. 表達式 switch

下面這個示例是基於表達式的值來執行不同的模塊:

day := 4
switch day {
case 1, 2, 3, 4, 5:
    fmt.Println("工作日")
case 6:
    fmt.Println("星期六")
case 7:
    fmt.Println("星期日")
default:
    fmt.Println("非法星期數")
}

下面這個示例是無表達式的,其效果等同於 if-else 語句:

score := 80
switch {
case score >= 90:
    fmt.Println("優秀")
case score >= 80:
    fmt.Println("良好")
case score >= 70:
    fmt.Println("一般")
default:
    fmt.Println("差勁")
}
2. 類型 switch

類型 switch 用於根據變量的類型來執行不同的代碼塊,通常用於處理接口類型的變量,接口相關的內容後面再介紹,這裏先直接使用,使用方式和前面的 switch 類似:

func printType(i interface{}) {
    switch v := i.(type) {
    case int:
        fmt.Printf("%v 是整數類型\n", v)
    case string:
        fmt.Printf("%v 是字符串類型\n", v)
    default:
        fmt.Printf("%v 是其他類型\n", v)
    }
}

func main() {
    num := 10
    str := "hello"
    printType(num)
    printType(str)
}

2、循環語句

循環語句就是 for 循環操作了,這裏介紹幾種類型:

1. for 循環

for 循環的用法和其他語言的類似,比如從 0 循環到 4:

for i := 0; i < 5; i++ {
    fmt.Printf("i:%v\n", i)
}

2. for-range 循環

for-range 循環可用於數組、切片、字符串、map 等可迭代對象,循環的參數又兩個,分別是索引和對應的元素。

這裏逐個介紹其示例:

1) 數組/切片

數組或者切片的示例如下:

s := []string{"a", "b", "c"}
for index, value := range s {
    fmt.Printf("index: %v, value: %v\n", index, value)
}

前面的 index 是索引下標,value 是下標對應的值。

如果不需要 index 或者 value,直接置為 "_" 即可:

s := []string{"a", "b", "c"}
for _, value := range s {
    fmt.Printf("value: %v\n", value)
}
2) 字符串

對字符串是用 for-range 返回的索引是字節索引:

s := "hello world"
for index, char := range s {
    fmt.Printf("index:%d, char:%c\n", index, char)
}

而如果字符串中包含中文,Go 能夠將其自動解碼,且返回中文字符開始的字節索引位置:

s2 := "hello 世界"
for index, char := range s2 {
    fmt.Printf("index:%d, char:%c\n", index, char)
}
3) map

對 map 使用 for-range 操作會迭代其 key-value:

m := map[string]int{
    "a": 1,
    "b": 4,
    "c": 2,
}

for k, v := range m {
    fmt.Printf("k:%s, v:%d\n", k, v)
}

3. 無限循環

對於前面的 for 循環,如果我們不設置任何條件,就可以實現一個無限循環,可以在內部通過 continue 和 break 來控制進入下一次循環或者退出循環。

以下是一個示例:

i := 0
for {
    i++
    if i%2 == 0 {
        fmt.Println("i 是偶數", i)
        continue
    }

    if i == 5 {
        fmt.Println("i = 5, 退出循環")
        break
    }
}
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.