Go 命令行工具
Go 语言提供了丰富的命令行工具,这些工具是 Go 开发流程的核心。掌握这些工具的使用对于 Go 开发者来说至关重要。本章将详细介绍 Go 工具链的各个命令及其使用方法。
🔧 Go 工具链概览
核心命令
bash
go help # 查看帮助信息
go version # 查看版本信息
go env # 查看环境变量
go build # 编译包
go run # 编译并运行程序
go install # 编译并安装包
go clean # 清理编译文件
go test # 运行测试
go fmt # 格式化代码
go vet # 静态分析工具
go mod # 模块管理
go get # 下载依赖包
go list # 列出包信息
go doc # 查看文档
go generate # 运行生成器📖 基础命令详解
1. go help - 帮助信息
查看所有命令
bash
go help查看特定命令帮助
bash
go help build # 查看 build 命令帮助
go help run # 查看 run 命令帮助
go help mod # 查看 mod 命令帮助输出示例
Go is a tool for managing Go source code.
Usage:
go <command> [arguments]
The commands are:
bug start a bug report
build compile packages and dependencies
clean remove object files and cached files
doc show documentation for package or symbol
env print Go environment information
fix update packages to use new APIs
fmt gofmt (reformat) package sources
generate generate Go files by processing source
get add dependencies to current module and install them
install compile and install packages and dependencies
list list packages or modules
mod module maintenance
work workspace maintenance
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet report likely mistakes in packages2. go version - 版本信息
基本用法
bash
# 查看 Go 版本
go version
# 输出:go version go1.21.0 darwin/amd64
# 查看详细版本信息
go version -m /path/to/binary版本信息解读
go version go1.21.0 darwin/amd64
│ │ │
│ │ └─ 架构 (amd64/arm64/386)
│ └─ 操作系统 (linux/darwin/windows)
└─ Go 版本号3. go env - 环境变量
查看所有环境变量
bash
go env查看特定环境变量
bash
go env GOPATH GOROOT GOPROXY设置环境变量
bash
# 设置代理
go env -w GOPROXY=https://goproxy.cn,direct
# 设置私有模块
go env -w GOPRIVATE=*.corp.example.com
# 重置环境变量
go env -u GOPROXY重要环境变量说明
| 变量 | 说明 | 示例值 |
|---|---|---|
GOROOT | Go 安装目录 | /usr/local/go |
GOPATH | 工作空间目录 | /home/user/go |
GOBIN | 可执行文件安装目录 | $GOPATH/bin |
GOOS | 目标操作系统 | linux, windows, darwin |
GOARCH | 目标架构 | amd64, arm64, 386 |
GOPROXY | 模块代理服务器 | https://proxy.golang.org |
GOSUMDB | 校验数据库 | sum.golang.org |
🔨 编译相关命令
1. go build - 编译包
基本用法
bash
# 编译当前目录
go build
# 编译指定文件
go build main.go
# 编译指定包
go build ./cmd/app
# 编译所有子包
go build ./...常用选项
bash
# 指定输出文件名
go build -o myapp main.go
# 交叉编译
GOOS=linux GOARCH=amd64 go build -o myapp-linux
# 显示编译过程
go build -v
# 编译时传递链接器参数
go build -ldflags "-X main.version=1.0.0"
# 禁用优化和内联
go build -gcflags "-N -l"构建标签
go
// +build linux darwin
// 只在 Linux 和 macOS 上编译
// +build !windows
// 除了 Windows 之外的系统上编译2. go run - 编译并运行
基本用法
bash
# 运行单个文件
go run main.go
# 运行多个文件
go run main.go utils.go
# 运行包
go run .
# 传递参数
go run main.go arg1 arg2示例代码
go
// main.go
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println("程序名称:", os.Args[0])
fmt.Println("参数列表:", os.Args[1:])
}bash
# 运行并传递参数
go run main.go hello world
# 输出:
# 程序名称: /tmp/go-build123/b001/exe/main
# 参数列表: [hello world]3. go install - 编译并安装
基本用法
bash
# 安装当前包
go install
# 安装指定包
go install github.com/user/package@latest
# 安装到指定目录
GOBIN=/usr/local/bin go install与 go build 的区别
| 命令 | 编译 | 安装到 GOBIN | 生成本地文件 |
|---|---|---|---|
go build | ✅ | ❌ | ✅ |
go install | ✅ | ✅ | ❌ |
🧹 清理相关命令
1. go clean - 清理文件
基本用法
bash
# 清理当前包的编译缓存
go clean
# 清理所有包的编译缓存
go clean -cache
# 清理模块下载缓存
go clean -modcache
# 清理测试缓存
go clean -testcache
# 显示将要删除的文件
go clean -n清理选项说明
| 选项 | 说明 | 清理内容 |
|---|---|---|
-cache | 清理构建缓存 | $GOCACHE 目录 |
-modcache | 清理模块缓存 | $GOPATH/pkg/mod |
-testcache | 清理测试缓存 | 测试结果缓存 |
-fuzzcache | 清理模糊测试缓存 | 模糊测试缓存 |
📦 包管理命令
1. go mod - 模块管理
初始化模块
bash
# 初始化新模块
go mod init module-name
# 示例
go mod init github.com/username/project模块维护
bash
# 下载依赖
go mod download
# 添加缺失的模块,删除无用的模块
go mod tidy
# 查看依赖图
go mod graph
# 解释为什么需要某个模块
go mod why golang.org/x/crypto
# 验证依赖
go mod verify
# 将依赖复制到 vendor 目录
go mod vendorgo.mod 文件示例
go
module github.com/example/project
go 1.21
require (
github.com/gin-gonic/gin v1.9.1
github.com/stretchr/testify v1.8.4
)
require (
github.com/bytedance/sonic v1.9.1 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
// ... 其他间接依赖
)
exclude github.com/example/bad-package v1.0.0
replace github.com/example/fork => ../local-fork2. go get - 获取依赖
基本用法
bash
# 获取最新版本
go get github.com/gin-gonic/gin
# 获取指定版本
go get github.com/gin-gonic/gin@v1.9.1
# 获取指定提交
go get github.com/gin-gonic/gin@abc123
# 获取最新的预发布版本
go get github.com/gin-gonic/gin@latest
# 升级所有依赖
go get -u ./...
# 只升级修订版本(安全更新)
go get -u=patch ./...版本选择语法
| 语法 | 说明 | 示例 |
|---|---|---|
@latest | 最新版本 | go get pkg@latest |
@v1.2.3 | 指定版本 | go get pkg@v1.2.3 |
@commit | 指定提交 | go get pkg@abc123 |
@master | 指定分支 | go get pkg@master |
@>=v1.2.0 | 版本约束 | go get pkg@>=v1.2.0 |
🧪 测试相关命令
1. go test - 运行测试
基本用法
bash
# 运行当前包测试
go test
# 运行所有包测试
go test ./...
# 运行指定包测试
go test ./pkg/utils
# 显示详细信息
go test -v测试选项
bash
# 运行基准测试
go test -bench=.
# 生成覆盖率报告
go test -cover
# 生成覆盖率文件
go test -coverprofile=coverage.out
# 查看覆盖率详情
go tool cover -html=coverage.out
# 运行指定测试函数
go test -run TestFunctionName
# 设置超时时间
go test -timeout 30s示例测试文件
go
// math_test.go
package main
import "testing"
func TestAdd(t *testing.T) {
result := Add(2, 3)
expected := 5
if result != expected {
t.Errorf("Add(2, 3) = %d; want %d", result, expected)
}
}
func BenchmarkAdd(b *testing.B) {
for i := 0; i < b.N; i++ {
Add(2, 3)
}
}🎨 代码质量工具
1. go fmt - 代码格式化
基本用法
bash
# 格式化当前目录
go fmt
# 格式化指定文件
go fmt main.go
# 格式化所有包
go fmt ./...
# 查看格式化差异但不修改
gofmt -d main.go
# 重写导入路径
gofmt -w -r 'old -> new' *.go2. go vet - 静态分析
基本用法
bash
# 检查当前包
go vet
# 检查所有包
go vet ./...
# 检查指定包
go vet ./pkg/utils常见检查项
- 未使用的变量
- 不可达的代码
- Printf 格式字符串错误
- 方法签名错误
- 结构体标签格式错误
3. go generate - 代码生成
基本用法
bash
# 运行当前包的生成器
go generate
# 运行所有包的生成器
go generate ./...生成器指令示例
go
// main.go
package main
//go:generate stringer -type=Status
type Status int
const (
Pending Status = iota
Running
Completed
)📚 文档相关命令
1. go doc - 查看文档
基本用法
bash
# 查看包文档
go doc fmt
# 查看函数文档
go doc fmt.Println
# 查看类型文档
go doc http.Server
# 显示所有导出的标识符
go doc -all fmt
# 显示源代码
go doc -src fmt.Println2. godoc - 文档服务器
启动本地文档服务器
bash
# 安装 godoc 工具
go install golang.org/x/tools/cmd/godoc@latest
# 启动文档服务器
godoc -http=:6060
# 在浏览器中访问
# http://localhost:6060🔧 其他实用命令
1. go list - 列出包信息
基本用法
bash
# 列出当前模块的包
go list ./...
# 列出所有依赖
go list -m all
# 显示包的详细信息
go list -json .
# 查找包的导入路径
go list -find github.com/gin-gonic/gin2. go tool - 工具链
查看可用工具
bash
go tool常用工具
bash
# 查看汇编代码
go tool objdump binary
# 查看符号表
go tool nm binary
# 性能分析
go tool pprof cpu.prof
# 代码覆盖率
go tool cover -html=coverage.out🎯 实践示例
创建完整项目流程
bash
# 1. 创建项目目录
mkdir myproject && cd myproject
# 2. 初始化模块
go mod init github.com/username/myproject
# 3. 创建主程序
cat > main.go << 'EOF'
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}
EOF
# 4. 添加依赖
go get github.com/gin-gonic/gin
# 5. 创建测试文件
cat > main_test.go << 'EOF'
package main
import "testing"
func TestMain(t *testing.T) {
// 测试代码
}
EOF
# 6. 运行测试
go test
# 7. 格式化代码
go fmt
# 8. 静态分析
go vet
# 9. 构建程序
go build
# 10. 清理缓存
go clean -cache📋 命令速查表
日常开发命令
| 命令 | 用途 | 示例 |
|---|---|---|
go run | 快速运行 | go run main.go |
go build | 编译程序 | go build -o app |
go test | 运行测试 | go test -v ./... |
go fmt | 格式化代码 | go fmt ./... |
go vet | 静态检查 | go vet ./... |
模块管理命令
| 命令 | 用途 | 示例 |
|---|---|---|
go mod init | 初始化模块 | go mod init myapp |
go mod tidy | 整理依赖 | go mod tidy |
go get | 添加依赖 | go get package@latest |
go mod download | 下载依赖 | go mod download |
信息查询命令
| 命令 | 用途 | 示例 |
|---|---|---|
go version | 查看版本 | go version |
go env | 查看环境 | go env GOPATH |
go list | 列出包信息 | go list -m all |
go doc | 查看文档 | go doc fmt.Println |
🎓 小结
本章我们详细学习了 Go 语言的命令行工具:
- ✅ 基础命令:version、env、help 等信息查询
- ✅ 编译命令:build、run、install 等编译工具
- ✅ 模块管理:mod、get 等依赖管理
- ✅ 测试工具:test、vet、fmt 等质量保证
- ✅ 文档工具:doc、generate 等辅助工具
- ✅ 实践流程:完整的项目开发流程
掌握这些工具是成为 Go 开发者的基础技能。建议多在实践中使用这些命令,熟能生巧。
接下来,让我们学习 Go 语言程序结构,了解 Go 程序的基本组成和组织方式。
提示
建议将常用的命令和参数记录下来,或者创建别名(alias)来提高开发效率。例如:
bash
alias gob='go build'
alias gor='go run'
alias got='go test -v'