Skip to content

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性能分析