快轉到主要內容
  1. Go 基礎入門/

組合型別

目錄
Go基礎入門 - 系列文
7: ➫

07: 本節課介紹了 Go 組合型別:陣列、slice和map的操作與遍歷。

陣列
#

陣列(Array)基本概念
#

  • 定義:陣列是一組長度固定,元素類型固定的序列。

陣列宣告與賦值
#

  • 宣告:指定陣列的長度和元素類型。
  • 預設值:陣列擁有預設值,基於它是值類型。
  • 賦值方式:可以在宣告時賦值或透過索引逐一賦值。
var array1 [3]int             // 宣告一個長度為3的int陣列
array1[0] = 1                 // 透過索引賦值
array2 := [3]int{1, 2, 3}     // 宣告並初始化陣列

陣列遍歷
#

  • 使用for循環:標準的遍歷方法,使用 len(array) 獲取陣列長度。
  • 使用for…range:簡化遍歷,自動處理索引和值。
for i := 0; i < len(array1); i++ {
    fmt.Println(array1[i])
}

for index, value := range array2 {
    fmt.Println(index, value)
}

Slice
#

Slice(切片)基本概念
#

  • 定義:Slice 是對陣列的參照,擁有動態大小。
  • 宣告:可以透過指定範圍創建 Slice。
array3 := [5]int{1, 2, 3, 4, 5}
slice1 := array3[1:4]  // 創建 Slice,參照 array3 的一部分

Slice 操作
#

  • 修改 Slice 元素:會影響原陣列。
  • 使用 make 函式:動態創建 Slice,指定長度和容量。
  • 使用 append 函式:動態追加元素,必要時會擴充底層陣列。
slice1[0] = 10              // 修改 Slice,影響原陣列
slice2 := make([]int, 3, 5) // 使用 make 創建 Slice
slice2 = append(slice2, 4)  // 追加元素

當然,以下是有關在 Go 語言中遍歷 Slice 的 Markdown 筆記和範例代碼:

Slice 遍歷
#

使用 for 循環遍歷 Slice
#

  • 標準 for 循環:可以使用 len(slice) 獲取 Slice 的長度,並透過索引訪問每個元素。
slice := []int{1, 2, 3, 4, 5}
for i := 0; i < len(slice); i++ {
    fmt.Println(slice[i])
}

使用 for…range 遍歷 Slice
#

  • for…range:簡化遍歷方式,自動提供每個元素的索引和值。
for index, value := range slice {
    fmt.Printf("Index: %d, Value: %d\n", index, value)
}

忽略索引或值
#

  • 僅遍歷值:如果不需要索引,可以使用下劃線 _ 忽略它。
for _, value := range slice {
    fmt.Println(value)
}

Map
#

Map 基本概念
#

  • 定義:Map 是一種無序的鍵值對集合。
  • 特性
    • 鍵(Key)必須是可比較的基本數據類型。
    • 值(Value)可以是任何類型。
    • Map 是參照類型。

Map 的宣告與初始化
#

  • 宣告:使用 var 關鍵字,指定鍵和值的類型。
  • 初始化:使用 make 函式或直接賦值初始化 Map。
var map1 map[string]string        // 宣告一個map
map1 = make(map[string]string, 2) // 初始化map,可選擇指定初始容量

// 直接初始化
map2 := map[string]string{
    "morning": "coding",
    "noon":    "delivering",
    "night":   "driving",
}

Map 的操作
#

  • 添加與修改元素:使用 map[key] = value 方式。
  • 檢查元素是否存在:使用雙賦值方式檢查鍵是否存在於 Map 中。
// 添加元素
map1["morning"] = "coding"

// 檢查並獲取元素
value, ok := map2["morning"]
if ok {
    fmt.Println("Value:", value)
} else {
    fmt.Println("Key not found")
}

Map 的刪除與清空
#

  • 刪除元素:使用 delete(map, key) 函式。
  • 清空 Map:將 Map 設為 nil 或重新 make。
delete(map1, "night") // 刪除 key 為 "night" 的元素

map1 = nil // 清空 map1
map2 = make(map[string]string) // 重新初始化 map2

Map 遍歷
#

  • 使用 for…range:遍歷 Map,獲取每個鍵值對。
for key, value := range map2 {
    fmt.Println(key, value)
}
Go基礎入門 - 系列文
7: ➫

相關文章

互斥鎖
16: 本節課說明 Go 的sync套件提供並發編程中的同步機制與資源管理工具。
結構體
08: 本節課介紹 Go 自定義數據類型與結構體的使用。並可模擬物件導向中的一些特性。
控制流程
09: 本節課是對 Go 控制流程的簡要介紹。