Go Modules #

一、Modules概述 #

Go Modules是Go 1.11引入的依赖管理系统。

二、初始化模块 #

2.1 创建模块 #

bash
mkdir myapp
cd myapp
go mod init myapp

2.2 go.mod文件 #

text
module myapp

go 1.22

2.3 模块路径 #

bash
go mod init github.com/user/myapp

三、go.mod文件 #

3.1 文件结构 #

text
module myapp

go 1.22

require (
    github.com/gin-gonic/gin v1.9.1
    gorm.io/gorm v1.25.0
)

require (
    github.com/some/indirect v1.0.0 // indirect
)

replace github.com/old/pkg => github.com/new/pkg v1.0.0

exclude github.com/bad/pkg v1.0.0

3.2 模块指令 #

指令 说明
module 模块路径
go Go版本
require 依赖
replace 替换
exclude 排除
retract 撤回

四、依赖管理 #

4.1 添加依赖 #

bash
go get github.com/gin-gonic/gin
go get github.com/gin-gonic/gin@v1.9.1
go get github.com/gin-gonic/gin@latest

4.2 更新依赖 #

bash
go get -u              # 更新所有依赖
go get -u=patch        # 更新补丁版本
go get package@latest  # 更新指定包

4.3 删除依赖 #

bash
go mod tidy  # 清理未使用的依赖

4.4 查看依赖 #

bash
go list -m all         # 所有依赖
go list -m -versions package  # 可用版本

五、go.sum文件 #

5.1 文件内容 #

text
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqFPSHk=
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYksXtJXQ2i8vLhQ/hvKDnNkKNpRbHjPbKls=

5.2 作用 #

  • 记录依赖的校验和
  • 确保依赖完整性
  • 防止篡改

六、版本控制 #

6.1 语义化版本 #

text
vMAJOR.MINOR.PATCH

v1.2.3
│ │ │
│ │ └── 补丁版本(bug修复)
│ └──── 次版本(新功能,向后兼容)
└────── 主版本(不兼容变更)

6.2 伪版本 #

text
v0.0.0-20191109021931-daa7c04131f5

用于未发布版本的提交。

6.3 +incompatible #

text
github.com/pkg/errors v0.9.1+incompatible

表示v2之前版本,未使用Go Modules。

七、常用命令 #

7.1 go mod命令 #

命令 说明
go mod init 初始化模块
go mod tidy 整理依赖
go mod download 下载依赖
go mod verify 验证依赖
go mod graph 依赖图
go mod why 解释依赖
go mod vendor 创建vendor目录

7.2 示例 #

bash
go mod init myapp
go mod tidy
go mod download
go mod verify

八、实际应用 #

8.1 项目结构 #

text
myapp/
├── cmd/
│   └── myapp/
│       └── main.go
├── internal/
│   └── service/
├── pkg/
│   └── utils/
├── go.mod
└── go.sum

8.2 多模块项目 #

text
myapp/
├── module1/
│   └── go.mod
├── module2/
│   └── go.mod
└── go.work

go.work:

text
go 1.22

use (
    ./module1
    ./module2
)

8.3 私有模块 #

bash
go env -w GOPRIVATE=github.com/mycompany/*

九、最佳实践 #

9.1 定期更新 #

bash
go get -u
go mod tidy

9.2 使用vendor #

bash
go mod vendor
go build -mod=vendor

9.3 版本锁定 #

bash
go get package@v1.2.3

十、总结 #

Go Modules要点:

文件 说明
go.mod 模块定义
go.sum 依赖校验

关键点:

  1. 初始化:go mod init
  2. 依赖管理:go get、go mod tidy
  3. 版本控制:语义化版本
  4. 私有模块:配置GOPRIVATE
  5. vendor模式:离线构建

准备好学习包导入了吗?让我们进入下一章!

最后更新:2026-03-26