Go 是 Google 於 2009 年釋出的靜態強型別語言,編譯速度快、垃圾回收輕量、內建並發原語。定位是系統程式設計與後端服務,不是「靜態語言的安全性加上動態語言的高效性」——它本質上就是靜態語言,只是刻意把複雜度壓低。
先備知識
Go 不適合作為第一門語言。建議先有任何一門語言的基礎,理解變數、迴圈、函式的概念。若尚未有程式基礎,先補 Python 或 JavaScript。
安裝環境
前往 go.dev/dl 下載對應平台的安裝包。安裝完成後執行:
1 | go version |
確認輸出版本號即安裝成功。
關於 GOPATH 與 Go Modules:Go 1.11 引入 Modules,1.16 起預設啟用。現代專案用 go mod init 初始化模組,原始碼放在任何目錄都行,不再需要把程式碼塞進 $GOPATH/src。$GOPATH 仍然存在,但現在只作為模組快取($GOPATH/pkg/mod)和已安裝工具($GOPATH/bin)的存放位置,不需手動設定。
新建一個最小模組:
1 | mkdir myapp && cd myapp |
語言基礎
這是學習重心,建議按以下順序推進,每一塊都要動手寫程式碼,不能只讀。
語法與型別:Go 的型別推斷(:=)讓宣告很簡潔,但要清楚什麼時候用 var、什麼時候用 :=。基本型別包括 int、float64、string、bool,以及固定長度的陣列(array)。
切片(slice):Go 最常用的資料結構,底層是陣列的動態視窗。要理解 len、cap、append 的行為,以及切片共享底層陣列可能帶來的副作用。
Map:鍵值對結構,讀取不存在的 key 會回傳零值而不是報錯,建議養成用 val, ok := m[key] 的二值寫法。
函式:Go 函式可以回傳多個值,這是處理錯誤的基礎。匿名函式、閉包、可變參數(...T)、defer 的執行順序(LIFO)都需要熟悉。
結構體與方法:Go 沒有 class,用結構體加方法替代。建構函式慣例是 NewXxx() 回傳指標。理解值接收者和指標接收者的差異。
介面(interface):Go 的介面是隱式實作,不需要 implements 宣告。空介面 interface{} 在 Go 1.18 後可以寫成 any。介面是 Go 實現多型與測試替換的核心機制,要花時間弄懂。
並發:goroutine 是 Go 的輕量執行緒,go func() 就能啟動。channel 是 goroutine 之間通訊的管道,分有緩衝和無緩衝。select 用於同時等待多個 channel。sync 套件的 WaitGroup、Mutex 處理同步與互斥。並發是 Go 的強項,也是最容易出 race condition 的地方,記得用 go test -race 檢查。
標準庫入門:fmt、os、io、bufio、net/http 是最常用的幾個,先把這些讀熟。
推薦書籍:Donovan & Kernighan 合著的《The Go Programming Language》(gopl.io,中文版稱《Go語言聖經》)是最紮實的入門書,語言本質講得清楚。Mark Summerfield 的《Programming in Go》(2012年)實務導向,但出版時 Go Modules 尚未存在,書中的 GOPATH 工作流已不適用現代開發,參考時要留意。
Go Web 開發
標準庫 HTTP
Go 的 net/http 套件本身功能完整,不一定需要框架。理解 http.Handler、http.HandlerFunc、ServeMux 的運作方式,對之後使用任何框架都有幫助。
常用 Web 框架
- Gin:路由效能高,中介層(middleware)生態成熟,是目前最普遍的選擇。
- Echo:API 設計簡潔,效能與 Gin 相近。
- Beego:全棧框架,內建 ORM 和 CLI 工具,適合快速搭建完整 MVC 應用,但相對重。
資料庫
標準庫 database/sql 提供統一介面,搭配各資料庫的 driver 使用。GORM 是最常用的 ORM,sqlx 則是輕量封裝,保留 SQL 控制彈性。
中介層常見用途
日誌記錄、身份驗證(JWT)、請求限流、CORS 處理,通常以 middleware chain 的方式掛載。
定時與非同步任務
標準庫的 time.Ticker 和 time.AfterFunc 處理簡單定時邏輯;需要持久化的延遲任務佇列,Go 標準庫沒有內建,要搭配外部套件如 asynq 或 machinery。
微服務
gRPC 是 Go 微服務間常用的通訊協定,搭配 Protocol Buffers 定義介面。
框架選擇:
- go-zero 和 Kratos:目前活躍度高、社群資源豐富,是新專案的主流選擇。
- go-kit:提供微服務常用的 transport/endpoint/service 分層抽象,設計嚴謹,但新功能開發已趨緩,維護為主。
- go-micro:授權已從 Apache-2.0 改為 BSL(Business Source License),商業使用有限制,使用前需確認授權條款,或改用社群維護的 fork。
Web 開發入門,官方的 Go by Example 程式碼片段導向,適合查語法;官方文件 go.dev/doc 的 Tour 也值得過一遍。
專案實戰
語法看完之後,最好找一個真實問題動手做。常見起手方向:命令列工具(cobra 是主流 CLI 框架)、REST API 服務、或為現有開源專案貢獻 issue fix。選自己有興趣的領域,能維持動力繼續寫下去。
持續追蹤
Go 每年約發布兩個版本。官方部落格 go.dev/blog 是最直接的消息來源,每次版本發布都會有 release notes 說明新特性與破壞性變更。




