Go Modules 常用命令速查 #
命令概览 #
text
┌─────────────────────────────────────────────────────────────┐
│ Go Modules 命令 │
├─────────────────────────────────────────────────────────────┤
│ │
│ go mod init 初始化模块 │
│ go mod tidy 整理依赖 │
│ go mod download 下载依赖 │
│ go mod verify 验证依赖 │
│ go mod graph 查看依赖图 │
│ go mod why 查看依赖原因 │
│ go mod vendor 创建 vendor │
│ go mod edit 编辑 go.mod │
│ │
│ go get 添加/更新依赖 │
│ go list 列出模块信息 │
│ go clean 清理缓存 │
│ │
└─────────────────────────────────────────────────────────────┘
go mod 命令 #
go mod init #
初始化新的模块。
bash
# 基本用法
go mod init <module-path>
# 示例
go mod init myproject
go mod init github.com/myuser/myproject
go mod init gitlab.company.com/team/project
输出文件:
go
// go.mod
module myproject
go 1.21
go mod tidy #
整理依赖,添加缺失的,移除多余的。
bash
# 基本用法
go mod tidy
# 详细输出
go mod tidy -v
# 忽略错误继续
go mod tidy -e
执行操作:
- 扫描源代码中的 import
- 添加缺失的依赖到 go.mod
- 移除未使用的依赖
- 更新 go.sum
go mod download #
下载依赖到本地缓存。
bash
# 下载所有依赖
go mod download
# 下载特定模块
go mod download github.com/gin-gonic/gin
# 下载特定版本
go mod download github.com/gin-gonic/gin@v1.9.1
# 下载并输出 JSON
go mod download -json
go mod download -json github.com/gin-gonic/gin
JSON 输出示例:
json
{
"Path": "github.com/gin-gonic/gin",
"Version": "v1.9.1",
"Error": "",
"Info": "/path/to/cache/download/github.com/gin-gonic/gin/@v/v1.9.1.info",
"GoMod": "/path/to/cache/download/github.com/gin-gonic/gin/@v/v1.9.1.mod",
"Zip": "/path/to/cache/download/github.com/gin-gonic/gin/@v/v1.9.1.zip",
"Dir": "/path/to/cache/github.com/gin-gonic/gin@v1.9.1",
"Sum": "h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqFPSHk=",
"GoModSum": "h1:hPrL6YRBqCtAI1IJFI4BYmqfvzDv3w=="
}
go mod verify #
验证依赖的完整性。
bash
# 验证所有依赖
go mod verify
# 输出
# all modules verified
# 验证失败示例
# github.com/gin-gonic/gin@v1.9.1: dir has been modified
go mod graph #
打印模块依赖图。
bash
# 查看依赖图
go mod graph
# 输出格式
# 模块 依赖模块@版本
myproject github.com/gin-gonic/gin@v1.9.1
myproject golang.org/x/text@v0.14.0
github.com/gin-gonic/gin@v1.9.1 github.com/go-playground/validator@v10.15.0
...
go mod why #
查看为什么需要某个依赖。
bash
# 查看依赖原因
go mod why github.com/json-iterator/go
# 输出
# github.com/json-iterator/go
# myproject
# github.com/gin-gonic/gin
# github.com/gin-gonic/gin/binding
# 查看模块原因
go mod why -m github.com/gin-gonic/gin
# 输出
# # github.com/gin-gonic/gin
# myproject
go mod vendor #
创建 vendor 目录。
bash
# 创建 vendor
go mod vendor
# 目录结构
vendor/
├── github.com/
│ └── gin-gonic/
│ └── gin/
├── golang.org/
│ └── x/
│ └── text/
└── modules.txt
modules.txt 内容:
text
# github.com/gin-gonic/gin v1.9.1
## explicit; go 1.20
github.com/gin-gonic/gin
github.com/gin-gonic/gin/binding
# golang.org/x/text v0.14.0
## explicit; go 1.18
golang.org/x/text/encoding
go mod edit #
编辑 go.mod 文件。
bash
# 打印 go.mod
go mod edit -print
# 格式化 go.mod
go mod edit -fmt
# 添加模块
go mod edit -module=github.com/myuser/myproject
go mod edit -go=1.21
# 添加依赖
go mod edit -require=github.com/gin-gonic/gin@v1.9.1
# 删除依赖
go mod edit -droprequire=github.com/gin-gonic/gin
# 添加 replace
go mod edit -replace=github.com/old/pkg=github.com/new/pkg@v1.0.0
# 删除 replace
go mod edit -dropreplace=github.com/old/pkg
# 添加 exclude
go mod edit -exclude=github.com/problematic/pkg@v1.0.0
# 删除 exclude
go mod edit -dropexclude=github.com/problematic/pkg@v1.0.0
# JSON 输出
go mod edit -json
JSON 输出示例:
json
{
"Module": {
"Path": "myproject",
"Go": "1.21"
},
"Require": [
{
"Path": "github.com/gin-gonic/gin",
"Version": "v1.9.1"
}
]
}
go get 命令 #
基本用法 #
bash
# 添加/更新依赖
go get <package>
# 添加最新版本
go get github.com/gin-gonic/gin@latest
# 添加特定版本
go get github.com/gin-gonic/gin@v1.9.1
# 添加特定分支
go get github.com/gin-gonic/gin@main
# 添加特定 commit
go get github.com/gin-gonic/gin@abc123
更新选项 #
bash
# 更新到最新次版本
go get -u github.com/gin-gonic/gin
# 更新所有依赖
go get -u
# 只更新补丁版本
go get -u=patch github.com/gin-gonic/gin
# 更新所有补丁版本
go get -u=patch
其他选项 #
bash
# 添加开发依赖(标记为 indirect)
go get -d github.com/gin-gonic/gin
# 仅更新 go.mod,不下载
go get -d -t ./...
# 添加测试依赖
go get -t github.com/gin-gonic/gin
# 升级/降级到特定版本
go get github.com/gin-gonic/gin@v1.9.0
go get vs go install #
bash
# go get - 添加依赖到当前模块
go get github.com/tools/godep
# 添加到 go.mod
# go install - 安装可执行文件到 $GOPATH/bin
go install github.com/tools/godep@latest
# 不修改 go.mod
go list 命令 #
列出模块 #
bash
# 列出所有依赖
go list -m all
# 输出
# myproject
# github.com/gin-gonic/gin v1.9.1
# github.com/go-playground/validator v10.15.0
# ...
# JSON 格式
go list -m -json all
# 输出
{
"Path": "github.com/gin-gonic/gin",
"Version": "v1.9.1",
"Time": "2023-05-09T14:32:45Z",
"Dir": "/path/to/cache/github.com/gin-gonic/gin@v1.9.1",
"GoMod": "/path/to/cache/download/.../v1.9.1.mod"
}
查看可用版本 #
bash
# 列出所有版本
go list -m -versions github.com/gin-gonic/gin
# 输出
# github.com/gin-gonic/gin v1.0.0 v1.1.0 v1.2.0 ... v1.9.1
# JSON 格式
go list -m -versions -json github.com/gin-gonic/gin
查看可更新版本 #
bash
# 列出可更新的依赖
go list -u -m all
# 输出
# github.com/gin-gonic/gin v1.9.0 [v1.9.1]
# golang.org/x/text v0.13.0 [v0.14.0]
查看模块详细信息 #
bash
# 查看特定模块信息
go list -m -json github.com/gin-gonic/gin@v1.9.1
# 输出
{
"Path": "github.com/gin-gonic/gin",
"Version": "v1.9.1",
"Query": "v1.9.1",
"Time": "2023-05-09T14:32:45Z",
"Dir": "/path/to/cache/github.com/gin-gonic/gin@v1.9.1",
"GoMod": "/path/to/cache/download/.../v1.9.1.mod",
"GoVersion": "1.20",
"Sum": "h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqFPSHk=",
"GoModSum": "h1:hPrL6YRBqCtAI1IJFI4BYmqfvzDv3w=="
}
列出包 #
bash
# 列出当前模块的包
go list ./...
# 输出
# myproject
# myproject/pkg/utils
# myproject/internal/config
# 列出所有包(包括依赖)
go list all
# JSON 格式
go list -json ./...
# 只列出包名
go list -f '{{.Name}}' ./...
# 列出包的导入路径
go list -f '{{.ImportPath}}' ./...
go clean 命令 #
清理缓存 #
bash
# 清理构建缓存
go clean -cache
# 清理模块缓存
go clean -modcache
# 清理测试缓存
go clean -testcache
# 清理所有
go clean -cache -modcache -testcache
# 清理特定包
go clean -cache github.com/gin-gonic/gin
# 查看将删除的文件
go clean -n -cache
清理选项 #
| 选项 | 说明 |
|---|---|
-cache |
清理构建缓存 |
-modcache |
清理模块缓存 |
-testcache |
清理测试缓存 |
-i |
清理安装的包 |
-r |
递归清理依赖 |
-n |
只打印命令,不执行 |
-x |
打印执行的命令 |
go build 命令 #
模块相关选项 #
bash
# 正常构建
go build
# 使用 vendor 目录
go build -mod=vendor
# 只读模式(不修改 go.mod)
go build -mod=readonly
# 更新依赖后构建
go build -mod=mod
# 指定输出文件
go build -o myapp
# 减小二进制大小
go build -ldflags="-s -w" -o myapp
# 交叉编译
GOOS=linux GOARCH=amd64 go build -o myapp
GOOS=windows GOARCH=amd64 go build -o myapp.exe
GOOS=darwin GOARCH=arm64 go build -o myapp
go run 命令 #
bash
# 运行程序
go run main.go
# 使用 vendor
go run -mod=vendor main.go
# 只读模式
go run -mod=readonly main.go
# 运行特定包
go run ./cmd/server
# 传递参数
go run main.go -port=8080
go test 命令 #
bash
# 运行测试
go test ./...
# 使用 vendor
go test -mod=vendor ./...
# 详细输出
go test -v ./...
# 运行特定测试
go test -run TestFunction ./...
# 测试覆盖率
go test -cover ./...
# 生成覆盖率报告
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out -o coverage.html
# 基准测试
go test -bench=. ./...
# 竞态检测
go test -race ./...
go install 命令 #
bash
# 安装当前模块
go install
# 安装特定版本的工具
go install github.com/go-delve/delve/cmd/dlv@latest
go install golang.org/x/tools/cmd/goimports@latest
# 安装到指定目录
GOBIN=/path/to/bin go install
# 安装特定平台的工具
GOOS=linux GOARCH=amd64 go install github.com/tools/godep@latest
环境变量命令 #
go env #
bash
# 查看所有环境变量
go env
# 查看特定变量
go env GOPATH
go env GOPROXY
go env GOMODCACHE
go env GOPRIVATE
# JSON 格式
go env -json
# 以 shell 格式输出
go env -w
设置环境变量 #
bash
# 设置全局配置
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOPRIVATE=github.com/mycompany/*
go env -w GONOSUMDB=github.com/mycompany/*
# 取消设置
go env -u GOPROXY
常用环境变量 #
| 变量 | 说明 | 默认值 |
|---|---|---|
| GOPATH | Go 工作目录 | ~/go |
| GOPROXY | 模块代理 | https://proxy.golang.org,direct |
| GOPRIVATE | 私有模块 | 空 |
| GONOSUMDB | 跳过校验的模块 | 空 |
| GOSUMDB | 校验和数据库 | sum.golang.org |
| GOMODCACHE | 模块缓存目录 | GOPATH/pkg/mod |
| GOBIN | 安装目录 | GOPATH/bin |
| GO111MODULE | 模块模式 | auto |
命令速查表 #
模块管理 #
| 命令 | 说明 |
|---|---|
go mod init |
初始化模块 |
go mod tidy |
整理依赖 |
go mod download |
下载依赖 |
go mod verify |
验证依赖 |
go mod graph |
查看依赖图 |
go mod why |
查看依赖原因 |
go mod vendor |
创建 vendor |
go mod edit |
编辑 go.mod |
依赖管理 #
| 命令 | 说明 |
|---|---|
go get pkg@version |
添加/更新依赖 |
go get -u pkg |
更新到最新次版本 |
go get -u=patch pkg |
更新到最新补丁版本 |
go list -m all |
列出所有依赖 |
go list -u -m all |
列出可更新依赖 |
go list -m -versions pkg |
列出可用版本 |
构建运行 #
| 命令 | 说明 |
|---|---|
go build |
构建项目 |
go build -mod=vendor |
使用 vendor 构建 |
go run main.go |
运行程序 |
go test ./... |
运行测试 |
go install |
安装程序 |
清理维护 #
| 命令 | 说明 |
|---|---|
go clean -cache |
清理构建缓存 |
go clean -modcache |
清理模块缓存 |
go clean -testcache |
清理测试缓存 |
go env |
查看环境变量 |
go env -w |
设置环境变量 |
常用组合命令 #
项目初始化 #
bash
# 创建新项目
mkdir myproject && cd myproject
go mod init github.com/myuser/myproject
依赖更新 #
bash
# 更新所有依赖
go get -u
go mod tidy
go mod verify
项目清理 #
bash
# 完全清理并重建
rm -rf vendor
go clean -modcache
go mod download
go mod tidy
CI/CD 流程 #
bash
# CI 构建脚本
go mod download # 下载依赖
go mod verify # 验证依赖
go build ./... # 构建
go test -race ./... # 测试
发布前检查 #
bash
# 发布检查清单
go mod tidy
go mod verify
go test ./...
go vet ./...
go build ./...
下一步 #
继续深入学习:
最后更新:2026-03-28