本文将按照从入门到精通的顺序,介绍最常用和最重要的 go 命令。

环境准备与验证
在开始之前,确保你已经安装了 Go 语言环境。
go version
这个命令用于检查 Go 的版本号,同时也能验证 Go 是否已正确安装并配置了环境变量 PATH。
# 查看当前 Go 版本 go version # 示例输出 go version go1.21.0 darwin/arm64
go env
这个命令会打印出当前 Go 环境的所有配置信息,GOPATH, GOROOT, GOOS, GOARCH 等,这对于排查环境问题非常有用。
go env # 示例输出 (部分) GO111MODULE="on" GOARCH="arm64" GOOS="darwin" GOPATH="/Users/yourname/go" GOROOT="/usr/local/go" ...
项目初始化与构建
这是开发一个新项目时最先用到的命令。

go mod init
在你的项目根目录下运行此命令,它会初始化一个 Go 模块,这会创建一个 go.mod 文件,该文件是项目的依赖管理核心。
# 创建一个新项目目录 mkdir myproject cd myproject # 初始化 Go 模块,模块名通常是项目路径或组织/项目名 go mod init github.com/yourname/myproject # 执行后,会生成一个 go.mod 文件类似: # module github.com/yourname/myproject # go 1.21
go build
这是最核心的构建命令,用于将 Go 源代码编译成可执行的二进制文件。
# 在当前目录下编译,生成的可执行文件名为 main (如果主包是 main) go build # 指定输出的可执行文件名 go build -o myapp # 编译指定目录下的所有 Go 文件 go build ./... # 交叉编译:为不同的操作系统和架构编译 # 在 macOS (darwin/arm64) 上编译 Linux (linux/amd64) 版本 GOOS=linux GOARCH=amd64 go build -o myapp-linux
go run
这个命令非常方便,它会直接编译并运行你的程序,非常适合快速开发和测试,它不会生成中间的可执行文件。
# 运行当前目录下的 main.go go run . # 运行指定的文件 go run main.go server.go # 运行指定目录下的所有 Go 文件 go run ./...
依赖管理
Go 1.11 之后官方推荐使用 Go Modules 进行依赖管理。

go get
用于添加或更新项目依赖。
# 添加一个最新的依赖包 go get github.com/gin-gonic/gin # 添加特定版本的依赖 go get github.com/some/lib@v1.2.3 # 升级到最新的次要版本 (例如从 v1.2.x 升级到 v1.3.x) go get github.com/some/lib@latest # 升级到最新的主版本 (例如从 v1.x 升级到 v2.x) go get github.com/some/lib@upgrade # 移除一个依赖 go get github.com/some/lib@none
go mod tidy
这个命令会整理你的 go.mod 和 go.sum 文件,它会:
- 添加
go.mod中缺失的依赖。 - 移除不再被代码使用的依赖。
- 更新
go.sum文件,确保所有依赖的哈希值都正确。
这是一个非常常用且重要的命令,建议在每次更新或修改依赖后运行它。
go mod tidy
go mod vendor
此命令会创建一个 vendor 目录,并将所有项目依赖的源代码复制到这个目录中,这可以用于构建一个不依赖网络、自包含的项目,或者在某些不支持 Go Modules 的旧环境中使用。
go mod vendor
代码测试
Go 拥有内置的测试框架,使用非常简单。
go test
这是运行测试的命令,Go 会自动寻找所有以 _test.go 结尾的文件,并执行其中的测试函数。
# 运行当前目录下的所有测试 go test # 运行并打印详细输出 go test -v # 运行并显示测试覆盖率 go test -cover # 运行并生成覆盖率报告文件 go test -coverprofile=coverage.out go tool cover -html=coverage.out # 在浏览器中查看报告 # 运行指定的测试文件或函数 go test -run TestMyFunction go test -run TestMyFunction/SubTest
代码格式化与静态分析
go fmt
Go 强制代码风格统一,go fmt 会自动将你的代码格式化为官方推荐的风格。强烈建议在提交代码前运行此命令。
# 格式化当前目录下的所有 Go 文件 go fmt . # 也可以使用更严格的格式化工具 goimports (需要安装) go install golang.org/x/tools/cmd/goimports@latest goimports -w .
go vet
go vet 是一个静态分析工具,它不会检查语法错误,而是会检查可能导致运行时错误的代码逻辑问题,fmt.Printf 的参数类型不匹配、空指针解引用等,它能在编译阶段就发现很多潜在 Bug。
# 分析当前目录下的所有 Go 文件 go vet . # 分析指定包 go vet ./mylib
代码文档
go doc
这是一个强大的命令行工具,用于查看 Go 包和代码的文档。
# 查看某个包的文档 go doc fmt # 查看包中的某个函数 go doc fmt.Printf # 查看当前包中的某个函数 go doc MyFunction # 在浏览器中打开文档 go doc -http=:6060 # 然后访问 http://localhost:6060 即可看到所有标准库和项目文档
godoc
godoc 是一个独立的文档服务器,功能比 go doc 更强大,可以生成并托管一个完整的网站来展示你的代码文档。
# 安装 godoc (go 命令不带) go get golang.org/x/tools/cmd/godoc # 启动文档服务器 godoc -http=:6060 # 访问 http://localhost:6060/pkg/ 即可查看所有已安装包的文档
其他常用命令
go clean
用于清理编译过程中生成的文件,如可执行文件、测试缓存、编译缓存等。
# 清理当前目录下的可执行文件 go clean # 清理所有编译生成的文件,包括测试缓存 go clean -cache -testcache
go list
用于列出包的信息,功能非常强大,常用于脚本和自动化。
# 列出当前模块的所有直接依赖
go list -m all
# 列出所有导入的包
go list ./...
# 查找包含特定字符串的包
go list -f '{{.ImportPath}}' all | grep "github.com/some"
总结与最佳实践
| 命令 | 功能 | 使用场景 |
|---|---|---|
go version |
检查 Go 版本 | 验证安装、CI/CD 环境检查 |
go env |
查看 Go 环境变量 | 排查环境问题 |
go mod init |
初始化 Go 模块 | 创建新项目第一步 |
go build |
编译代码 | 构建生产环境可执行文件 |
go run |
编译并运行代码 | 本地快速开发和测试 |
go get |
获取/更新依赖 | 添加/修改项目依赖 |
go mod tidy |
整理依赖 | 保持 go.mod 和 go.sum 干净 |
go test |
运行测试 | 单元测试、集成测试 |
go fmt |
格式化代码 | 代码提交前,保证风格统一 |
go vet |
静态分析 | 代码提交前,发现潜在 Bug |
go doc |
查看文档 | 快速了解包和函数用法 |
一个典型的开发流程:
- 创建项目:
mkdir myapp && cd myapp - 初始化模块:
go mod init myapp - 编写代码:
vim main.go - 运行测试:
go test -v - 格式化代码:
go fmt . - 静态分析:
go vet . - 运行程序:
go run . - 添加依赖:
go get github.com/... - 整理依赖:
go mod tidy - 构建最终产物:
go build -o myapp
掌握这些 go 命令,你就能高效地完成绝大多数 Go 项目的日常开发任务。
