iT邦幫忙

2025 iThome 鐵人賽

DAY 1
1
Modern Web

後端攻略筆記系列 第 1

Day 1 : Go 語言入門:用串珠和電話簿搞懂 slice 與 map

  • 分享至 

  • xImage
  •  

✨ 篇一

一、slice:像一串彩色串珠

想像你有一串珠子,按照順序擺好。你可以馬上拿出第 1 顆、第 2 顆。這就是 slice:一個有順序的動態陣列

  • 本質:記錄「長度 len」、「容量 cap」、指向底層陣列。
  • 可以隨時加長(append),自動幫你換大串珠線。
fruits := []string{"apple", "banana", "grape"}
fmt.Println(fruits[0]) // apple

👉 找第幾顆很快,但要找「有沒有紅色珠子」只能一個一個看。


二、map:像一本電話簿

map 就是「鍵值配對」,像電話簿一樣:用名字(key)找號碼(value)。

phonebook := map[string]string{
    "Alice": "1234",
    "Bob":   "5678",
}

number, ok := phonebook["Alice"]
if ok {
    fmt.Println("Alice 的電話:", number)
} else {
    fmt.Println("找不到這個名字")
}

👉 用名字就能直接翻到頁碼 → 很快!但每次順序不一定。


三、語法小技巧

  • 建 slice
s := []int{1, 2, 3}
  • 建 map
m := map[string]int{"dozen": 12}
  • 存在判斷
v, ok := m["dozen"] // ok 表示有沒有找到
  • 忽略索引
for _, v := range s {
    fmt.Println(v)
}

四、為什麼要有 ok

想像學生成績表:

grades := map[string]int{"Tom": 0}

g, ok := grades["Tom"]
fmt.Println(g, ok)  // 0 true (Tom有,只是零分)

g2, ok2 := grades["Amy"]
fmt.Println(g2, ok2) // 0 false (Amy根本沒這個人)

👉 沒有 ok,就會混淆「零分」跟「不存在」。


五、slice vs map:什麼時候用?

特性 slice(串珠) map(電話簿)
是否有序 ✅ 有序 ❌ 無序
存取速度 按位置 O(1) 按 key O(1)
查找方式 按值找 = O(n) 檢查存在 = O(1)
用途 排序、遍歷 快速查詢、計數、分組

六、小練習

  1. 建一個 slice,存 5 個水果,印出第 3 個。
  2. 建一個 map,存 3 位朋友的電話號碼,查找某位朋友並判斷是否存在。
  3. 嘗試遍歷 slice,忽略索引。
  4. 嘗試查找一個不存在的 map key,看看 ok

七、實戰連結:Gross Store 單位表

func Units() map[string]int {
    return map[string]int{
        "dozen": 12,
        "gross": 144,
    }
}

👉 用「名稱 → 數量」的對照表,是 map 的最佳舞台。



下一篇
Day 2 : Go語言 slice 與 map 進階理解
系列文
後端攻略筆記13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言