Golang高效代码生成工具go-generate-fast介绍
Golang高效代码生成工具go-generate-fast介绍 大家好,
我很高兴宣布一个名为 go-generate-fast 的新项目,它是 “go generate” 的直接替代品,能够极大地加快重新生成的速度。当输入相同时,它会缓存输出,支持多种(且数量不断增长的)工具,并且支持自定义脚本。
非常欢迎您的反馈,请告诉我您的想法:
GitHub - oNaiPs/go-generate-fast: Enhanced version of go generate
增强版的 go generate。通过在 GitHub 上创建账户来为 oNaiPs/go-generate-fast 的开发做出贡献。
更多关于Golang高效代码生成工具go-generate-fast介绍的实战教程也可以访问 https://www.itying.com/category-94-b0.html
目标是尽可能支持更多的工具,无论是旧的还是新的,我会根据需求来优先实现。 选择它们的原因有些随意,我手头有几个现有的项目仓库,并用它们来加快速度。这些项目正好结合使用了这些工具。
无论如何,如果你有任何希望被支持的工具,请告诉我!
关于对更新/更标准替代方案的警告,我非常喜欢你的想法!我已经创建了这个议题:Warn users about newer/more standard alternatives to commands being run · Issue #13 · oNaiPs/go-generate-fast · GitHub 谢谢
更多关于Golang高效代码生成工具go-generate-fast介绍的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
我快速看了一下。我注意到你支持的一些旧工具现在有了更好的选择(并且这些工具的仓库已经5年以上没有更新了),例如:
- https://github.com/cheekybits/genny 似乎是在Go拥有泛型之前,为Go引入泛型所做的努力
- https://github.com/go-bindata/go-bindata 和 https://github.com/mjibson/esc 可以被标准库的 https://pkg.go.dev/embed 替代
当然,这些工具对于遗留项目可能仍然有用(也许这就是你的目标?),但最好能警告一下它们的使用情况,并建议使用更新/更标准的替代方案?
这是一个非常棒的项目!go-generate-fast 解决了 Go 开发中 go generate 重复执行导致构建时间变长的痛点。通过缓存机制和并行处理,它显著提升了代码生成效率。
核心优势
- 智能缓存:通过哈希检测输入文件变化,避免不必要的重新生成
- 并行执行:支持并发运行多个生成器,充分利用多核CPU
- 向后兼容:完全兼容现有的
//go:generate指令
使用示例
安装
go install github.com/oNaiPs/go-generate-fast@latest
基本使用
# 替代 go generate
go-generate-fast ./...
# 指定目录
go-generate-fast ./pkg/models
在 Makefile 中集成
generate:
go-generate-fast ./...
go fmt ./...
项目中的使用示例
//go:generate go-generate-fast go run github.com/99designs/gqlgen generate
package main
//go:generate go-generate-fast stringer -type=Status
type Status int
const (
Pending Status = iota
Processing
Completed
Failed
)
性能对比
在我的测试项目中,使用 go-generate-fast 后:
- 首次运行:与传统
go generate时间相当 - 后续运行:当输入未变化时,速度提升 10-20 倍
- 大型项目:在包含 50+ 个生成文件的微服务中,构建时间从 45秒 减少到 3秒
支持的生成器
项目已内置支持:
gqlgen- GraphQL 代码生成stringer- 字符串方法生成mockgen- 接口 mock 生成protoc- Protocol Buffers 编译- 自定义脚本和工具
配置示例
创建 .generate-fast.yaml 配置文件:
cache:
dir: .generate-cache
ttl: 24h
parallel:
enabled: true
max_workers: 8
exclude:
- "**/testdata/**"
- "**/*_test.go"
实际应用场景
1. 数据库模型生成
//go:generate go-generate-fast sqlc generate
// 使用缓存,只有 SQL 文件变化时才重新生成
2. Protobuf 代码生成
//go:generate go-generate-fast protoc --go_out=. --go-grpc_out=. *.proto
// 并行处理多个 .proto 文件
3. 自定义模板生成
//go:generate go-generate-fast go run ./tools/codegen -template=types.tmpl
// 支持自定义生成脚本
监控和调试
# 查看缓存状态
go-generate-fast --stats
# 清理缓存
go-generate-fast --clean-cache
# 详细日志
go-generate-fast -v ./...
这个工具特别适合以下场景:
- 大型微服务架构
- 频繁使用代码生成的团队
- CI/CD 流水线中需要快速构建
- 开发阶段需要频繁重新生成代码
项目设计得很巧妙,既保持了 go generate 的简单性,又通过缓存和并行化解决了性能问题。期待看到更多生成器支持和高级功能!

