引入

写完代码要编译、要检查、要格式化。Go 自带一整套工具链,从构建运行到静态分析、文档生成,不用额外装东西,命令行全搞定。

正文

定义

定义

Go 工具链是 Go 自带的一系列命令行工具,涵盖编译(go build)、运行(go run)、静态分析(go vet)、格式化(go fmt)、文档(go doc)等功能,是日常开发的核心工具集。

语法

go build ./...
go run main.go
go vet ./...
go fmt ./...
go doc fmt.Println

例子

go build

# 编译当前包
go build
 
# 编译指定包
go build ./cmd/server
 
# 交叉编译(Linux amd64)
GOOS=linux GOARCH=amd64 go build -o server main.go

go build 把 Go 源码编译成可执行文件,支持交叉编译到其他平台。

go run

# 直接运行
go run main.go
 
# 运行带参数
go run main.go --port 8080

go run 编译并立即执行,不生成文件,适合开发和调试

go vet

# 检查当前包
go vet
 
# 检查所有包
go vet ./...

go vet静态分析,能发现常见错误:Printf 格式串和参数不匹配、不可达代码、拷贝锁等。

go fmt

# 格式化当前包
go fmt
 
# 格式化指定文件
go fmt main.go

go fmt 按 Go 官方规范自动格式化代码,缩进、对齐、空格全给你处理好。

go doc

# 查看包的文档
go doc fmt
 
# 查看具体函数
go doc fmt.Println
 
# 查看结构体
go doc net/http.Request

go doc 从源码注释生成交互式文档,不用离开终端就能查 API。

常见写法

命令说明
go build ./…编译所有包
go build -o name指定输出文件名
go run main.go编译并运行
go vet ./…静态分析所有包
go fmt ./…格式化所有包
go doc pkg.Func查看函数文档
go mod tidy整理依赖
go mod download下载依赖
go env查看环境变量
go version查看 Go 版本

特点

  • 零配置:不需要 Makefile 或构建脚本,go build 直接用
  • go fmt 统一代码风格,团队不再有格式争论
  • go vet 能在编译前发现常见 bug 模式
  • go doc 直接从源码注释提取文档,文档和代码同步
  • 支持交叉编译,一行命令构建多平台二进制
  • go mod tidy 自动清理未使用的依赖,保持 go.mod 干净
  • 工具链全部随 Go 安装,无需额外依赖

理解

Go 工具链的设计哲学是”开箱即用”。编译、运行、检查、格式化、文档,一个 go 命令全包了。不用折腾构建系统配置,不用装插件,省下来的时间写代码多好。go vetgo fmt 更是写代码的好习惯,提交前跑一下能避免很多低级错误。

引出

工具链让日常开发顺畅,但写泛用代码时总得给每种类型重复写一遍?接下来看 Go 泛型,学习怎么用类型参数写出类型安全的通用代码。