go 命令速览
本教程共 80 篇 · 第 4 篇 · 更新于 2026-07-27 · 约 8 分钟阅读
4. go 命令速览
本节目标:掌握 go 命令行的核心子命令,知道每个命令干什么用、什么时候用。
go 命令是什么
装完 Go 之后,你在终端里输入 go,就会看到一段帮助信息。go 是 Go 工具链的入口,所有编译、运行、测试、格式化、依赖管理都通过它来调用。
先输入这个看看有哪些命令:
go help
你会看到一长串子命令。别慌,日常开发常用的就十来个,我来逐个讲。
代码相关命令
go build
编译代码,生成可执行文件或库:
go build # 编译当前目录的包
go build ./... # 编译当前模块下所有包
go build -o myapp # 指定输出文件名
编译错误会在终端显示。如果没有任何输出,说明编译通过了。
go run
编译并立即运行,不留可执行文件:
go run main.go # 运行指定文件
go run . # 运行当前目录的包
这是开发阶段最常用的命令,改完代码马上看结果。
go test
运行测试文件(以 _test.go 结尾的文件):
go test # 测试当前包
go test ./... # 测试所有包
go test -v # 显示详细输出
go test -run TestAdd # 只跑名字匹配的测试
加 -cover 可以看测试覆盖率:
go test -cover
go fmt
自动格式化代码,统一缩进和空格风格:
go fmt # 格式化当前包
go fmt ./... # 格式化所有包
大部分编辑器会设置成保存时自动运行 go fmt,你写代码时几乎感觉不到它的存在。
go vet
静态检查,找出代码里可疑的地方。它比编译器更严格,能发现一些逻辑错误:
go vet # 检查当前包
go vet ./... # 检查所有包
比如 Printf 的格式化动词和参数不匹配,go vet 能帮你抓出来。
go fix(Go 1.26 重写)
go fix 在 Go 1.26 中被全面重写,现在是 Go 的现代化器(Modernizer)。
go fix ./... # 自动升级代码到最新写法
它内置了几十个 fixer,能自动把旧代码升级为新写法。比如:
- 用
min(x, y)替代手写的求最小值函数(1.21 内置) - 用
slices.Sort替代sort.Slice(1.21 标准库) - 用
maps.Clone替代手写的 map 拷贝 - 把过时的 API 调用替换为新的等价写法
NoteGo 1.26 之前的
go fix只有一个功能:把 Go 1 之前的老代码迁移到 Go 1。那些旧 fixer 已经全部移除,现在go fix是全新的现代化器。
go fix 还支持 //go:fix inline 指令,库作者可以用它标记 API 迁移路径。用户跑了 go fix 之后,旧 API 调用会自动替换成新 API。
它和 go vet 用的是同一套分析框架,所以 go vet 能发现的问题,go fix 也能自动修复。
Tip升级 Go 版本后,建议跑一遍
go fix ./...,把旧代码升级到新写法。它不会改变程序行为,只做等价替换。
go doc
查看文档,不用打开浏览器:
go doc fmt.Println # 查看 fmt.Println 的文档
go doc fmt # 查看 fmt 包的概览
go doc -all fmt # 查看 fmt 包所有导出的内容
WarningGo 1.26 删除了旧的
cmd/doc和go tool doc,统一用go doc。
模块相关命令
go mod
管理模块(go.mod 文件):
go mod init example/hello # 初始化新模块
go mod tidy # 整理依赖(添加缺少的、删除多余的)
go mod download # 下载依赖到本地缓存
go mod verify # 验证依赖完整性
go mod graph # 查看依赖图
go mod tidy 是你以后最常用的命令之一。每次增删 import 后跑一下,它会自动同步 go.mod 和 go.sum。
go get
管理依赖版本:
go get github.com/google/uuid # 添加依赖(最新版本)
go get github.com/google/uuid@v1.6.0 # 指定版本
go get github.com/google/uuid@latest # 升级到最新
Warning以前
go get也能安装命令行工具。Go 1.17 起推荐改用go install,Go 1.18 起go get彻底不装二进制了,只管依赖版本。详见 §69。
go install
编译并安装命令行工具到 $GOPATH/bin:
go install github.com/google/uuid@latest # 安装最新版工具
和 go get 的区别:go install pkg@version 会编译出二进制放到你的 PATH 里,go get 只是把依赖加到 go.mod。
其他常用命令
go env
查看和设置环境变量(上一节讲过):
go env GOPATH # 查看某个变量
go env -w GOPROXY=https://goproxy.cn,direct # 设置变量
go version
查看 Go 版本:
go version # 当前安装的版本
go version -m hello # 查看二进制文件的 Go 版本
go clean
清理缓存和编译产物:
go clean # 删除当前包的编译产物
go clean -modcache # 清除模块下载缓存
go clean -cache # 清除编译缓存
go clean -testcache # 清除测试缓存
go list
列出包的信息:
go list ./... # 列出当前模块所有包
go list -m all # 列出所有依赖
go list -m -versions github.com/google/uuid # 查看依赖的可用版本
命令速查表
| 命令 | 作用 | 使用场景 |
|---|---|---|
go build | 编译 | 部署前编译 |
go run | 编译并运行 | 日常开发 |
go test | 运行测试 | 写完代码跑测试 |
go fmt | 格式化代码 | 保存时自动 |
go vet | 静态检查 | 提交前检查 |
go fix | 自动升级代码 | 升级 Go 版本后 |
go doc | 查看文档 | 不记得 API 时 |
go mod | 管理模块 | 初始化、整理依赖 |
go get | 管理依赖版本 | 添加、升级依赖 |
go install | 安装工具 | 装命令行工具 |
go env | 环境变量 | 配置 Go 环境 |
go clean | 清理缓存 | 磁盘空间不够时 |
go list | 列出信息 | 查看包和依赖 |
工具链版本管理
从 Go 1.21 开始,Go 引入了工具链版本管理。go.mod 里的 go 行指定了最低版本要求,toolchain 行指定了首选工具链版本。
module example/hello
go 1.25.0
toolchain go1.26.5
当你在不同项目间切换时,go 命令会自动选择合适的工具链版本。如果项目要求比你安装的版本更新的 Go,它会自动下载并使用那个版本。
你可以用 GOTOOLCHAIN 环境变量控制这个行为:
go env -w GOTOOLCHAIN=auto # 默认值,自动切换
go env -w GOTOOLCHAIN=go1.26.5 # 强制使用特定版本
Tip大部分情况下你不用管工具链版本管理,保持默认的
auto就行。Go 会自动帮你处理。
学完这节你能做什么
- 知道
go下有哪些子命令,各自干什么 - 会用
go run、go build、go test三个最常用的命令 - 知道
go fix(1.26)能自动升级旧代码 - 会用
go mod tidy整理依赖 - 会用
go doc查看文档
下一节讲怎么配置编辑器和 IDE。