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

执行操作:

  1. 扫描源代码中的 import
  2. 添加缺失的依赖到 go.mod
  3. 移除未使用的依赖
  4. 更新 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