Go | 使用模組化系統來管理
💬 簡介
Go 在 1.11 版之後正式導入模組系統(Go Modules),並自 1.16 起成為預設建置方式。
模組系統提供了穩定的套件管理機制,不再依賴 $GOPATH
,大幅簡化專案依賴的管理流程。
本篇文章將說明:
- 如何初始化與使用
go mod
go.mod
與go.sum
的作用- 管理第三方套件依賴
- 常見指令與實務操作技巧
圖片來源:Gophers
🧱 go mod 初始化與專案建立
🛠 建立專案與初始化模組
1
2
3mkdir myproject
cd myproject
go mod init example.com/myproject執行後會產生
go.mod
檔案:1
2
3module example.com/myproject
go 1.22📄
go.mod
紀錄專案的模組名稱與 Go 版本,並隨著相依套件變動自動更新。✏️ 建立一個簡單檔案
main.go
1
2
3
4
5
6
7package main
import "fmt"
func main() {
fmt.Println("Hello, Go Modules!")
}此時執行
go run .
或go build
,將自動使用模組系統建置專案。
🔍 管理相依套件(dependency)
📥 匯入第三方套件
以安裝
github.com/google/uuid
套件為例:1
2
3import "github.com/google/uuid"
id := uuid.New()只要在程式碼中使用該套件,並執行:
1
go mod tidy
將自動下載套件,並更新
go.mod
與go.sum
。📁
go.mod
檔案內容示例1
2
3
4
5
6
7module example.com/myproject
go 1.22
require (
github.com/google/uuid v1.3.1
)📁
go.sum
是什麼?此檔案記錄所有相依套件的精確版本與雜湊碼,確保每次建置都能還原相同的依賴環境。
⚠️ 請務必將
go.sum
一併提交至版本控制中。
🧰 常用 go mod 指令一覽
指令 | 功能說明 |
---|---|
go mod init |
初始化模組 |
go mod tidy |
自動補齊缺失依賴,移除未使用依賴 |
go mod download |
下載 go.mod 中所有套件 |
go mod verify |
驗證下載的模組與雜湊是否一致 |
go list -m all |
顯示所有相依模組 |
go get example.com/pkg@v1.2.3 |
指定版本取得特定模組 |
go mod edit |
手動編輯 go.mod (進階用) |
- 範例:升級某個套件至最新版本
1
go get github.com/google/uuid@latest
- 範例:移除未使用套件
1
go mod tidy
📝
go mod tidy
是常用指令,請養成每次更動後都執行的習慣,保持模組檔案整潔。
📦 模組與套件的關係
- 模組(module):由
go.mod
定義的整體專案單位。 - 套件(package):模組中不同子目錄的邏輯單位(每個資料夾一個套件)。
例如:
1 | myproject/ |
引用方式:
1 | import "example.com/myproject/util" |
📝 模組提供整體路徑基礎,套件則依資料夾分工模組化。
🧪 go mod 測試與建置整合
Go Modules 與測試、建置流程高度整合,搭配 go test
、go build
等指令使用無縫順暢。
1 | go test ./... |
可確保所有相依模組會一併正確處理。
建議搭配 .gitignore
忽略下列目錄:
1 | /vendor/ |
📝 若有使用
vendor
模式(離線建置),可使用go mod vendor
指令產生套件備份資料夾。
🎯 總結
Go Modules 為現代 Golang 專案管理提供了穩定、可預測的依賴環境,建議所有專案皆使用模組系統來建置。
本篇總結如下:
- ✅ 使用
go mod init
建立模組 - ✅ 透過
go.mod
、go.sum
管理相依套件 - ✅ 掌握
go get
、go mod tidy
、go mod download
等指令 - ✅ 清楚模組與套件的對應關係
- ✅ 模組系統支援版本控制與團隊合作
最後建議回顧一下 Go | 菜鳥教學 目錄,了解其章節內容。
註:以上參考了
Go