Golang 入门扩展——常用工具与技巧
学习 Go 过程中积累的实用技巧和工具用法。
go:generate 代码生成
go generate 是 Go 提供的代码生成工具,通过源代码中的注释触发外部命令,常用于自动化生成重复性代码。
基本语法
在 .go 文件中添加特殊注释:
go
//go:generate command arguments然后运行:
bash
go generate ./...常用场景
1. 生成 String() 方法
使用 stringer 工具为枚举类型自动生成 String() 方法:
go
//go:generate stringer -type=Status
type Status int
const (
StatusPending Status = iota
StatusRunning
StatusDone
StatusFailed
)运行 go generate 后自动生成 status_string.go:
go
func (i Status) String() string { ... }2. 生成 Mock 实现
使用 mockgen 为接口生成 Mock:
go
//go:generate mockgen -destination=mocks/repo_mock.go -package=mocks . UserRepository
type UserRepository interface {
GetUser(id int) (*User, error)
ListUsers() ([]*User, error)
}3. 嵌入静态资源
go
//go:generate go-bindata -o=assets/bindata.go -pkg=assets ./static/...gofmt 与 goimports
bash
# 格式化代码
gofmt -w .
# 格式化 + 自动整理 import
goimports -w .在 VSCode 中安装 Go 扩展后,保存文件时会自动运行这些工具。
交叉编译
Go 的一大优势是方便地交叉编译到不同平台:
bash
# 编译为 Linux amd64
GOOS=linux GOARCH=amd64 go build -o app-linux
# 编译为 Windows amd64
GOOS=windows GOARCH=amd64 go build -o app.exe
# 编译为 macOS (Apple Silicon)
GOOS=darwin GOARCH=arm64 go build -o app-darwin常用命令速查
| 命令 | 作用 |
|---|---|
go mod init | 初始化 Go 模块 |
go mod tidy | 清理未使用的依赖 |
go mod download | 下载依赖到本地缓存 |
go test ./... | 递归运行所有测试 |
go test -v -race | 详细输出 + 竞态检测 |
go build -ldflags="-s -w" | 编译并减小二进制体积 |
go tool pprof | 性能分析 |