首页 / Go 语言入门教程 / go 命令速览

Go 语言入门教程

go 命令速览

本教程共 80 篇 · 第 4 篇 · 更新于 2026-07-27 · 约 8 分钟阅读

GoGo 入门教程go 命令go fixgo buildgo mod命令行工具Go 1.26

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 调用替换为新的等价写法
Note

Go 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 包所有导出的内容
Warning

Go 1.26 删除了旧的 cmd/docgo 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.modgo.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 rungo buildgo test 三个最常用的命令
  • 知道 go fix(1.26)能自动升级旧代码
  • 会用 go mod tidy 整理依赖
  • 会用 go doc 查看文档

下一节讲怎么配置编辑器和 IDE。