關於這份報告
本手冊整理自「惟理」的 Go 學習過程:從第一次複習教學,到後來新增的J.go~O.go。
寫作原則: 跟課堂講解一樣清楚,不刻意省略、不為了短而簡化。
更新約定: 之後每次學完新內容,都會把新章節補進這份手冊。
使用說明
- 1. 建議對照 repo 裡的練習檔案一起看(
hello.go、A.go~O.go)。 - 2. 每一章末尾有「自測」——先自己答,再對答案。
- 3. 章節順序就是你實際學過的順序;不必跳章。
- 4. 之後若新增章節,會在「修訂紀錄」與目錄一起更新。
1. 學習地圖與檔案對照
1.1 你學過的內容(依時間)
| 階段 | 內容 | 對應檔案 |
|---|---|---|
| 入門 | 第一個程式、外部套件 | hello.go |
| 變數與常數 | var、:=、區塊宣告、const | A.go B.go C.go |
| 輸出與型別 | fmt、基本型別、bool、uint | D.go E.go F.go G.go |
| 陣列 | 宣告、索引、初始化、len | H.go i.go |
| Slice | len/cap、從陣列切片、make | J.go |
| Slice 進階 | append、再切片、copy | K.go |
| 條件 | +=、if / else / else if、巢狀 if | L.go |
| 分支 | switch、多值 case、default | M.go |
| 迴圈 | 三段式 for、continue、巢狀、range | N.go |
| 函式 | 參數、回傳值、多回傳、命名回傳 | O.go |
1.2 怎麼跑單一檔案
因為很多檔案都是 package main + func main(),不要在專案根目錄一次 go run .(會衝突)。
請這樣跑:
go run hello.go
go run A.go
go run J.go
# 依此類推
註:同一個資料夾裡若同時有多個func main,go run .會失敗。這是練習筆記型 repo 的常見狀況,之後若要做成正式專案,再拆成每個資料夾一個main。
2. 程式骨架:package / import / main
對應:hello.go
2.1 最小可執行結構
package main
import (
"fmt"
"rsc.io/quote"
)
func main() {
fmt.Println(quote.Go())
}
每一段的意義:
| 部分 | 作用 |
|---|---|
package main | 宣告這個檔案屬於 main 套件。要做成可執行程式,套件名必須是 main。 |
import (...) | 引入要用的套件。標準庫如 fmt;外部套件如 rsc.io/quote(寫在 go.mod)。 |
func main() | 程式入口。程式從這裡開始跑。一個可執行程式只能有一個 main。 |
2.2 必須記住的規則
- 1. 可執行程式 = C0 + C1
少一個就不是一般意義上的「可直接 go run 的小程式」。
- 2. 同一目錄多個 C0 會衝突
你早期的 H.go、i.go 曾在同一個檔案裡貼多段 package main + func main(),那適合作筆記,但不適合作為單一可編譯單元。
- 3. 匯出規則(大小寫)
別的套件能用的名字,第一個字母要大寫。 例如 quote.Go() 的 G 是大寫,所以外部套件才能呼叫。 若寫成小寫 quote.go,在套件外會無法使用。
- 4.