Golang代码生成器
最近在学习Golang,想找一个好用的代码生成器工具,大家有什么推荐的吗?最好能支持以下功能:
- 根据数据库表结构自动生成Model代码
- 支持生成CRUD基础操作
- 能自定义模板
- 有比较好的错误处理机制
目前看到有gormgen、xo这些工具,但不太确定哪个更适合实际项目使用。有用过的大佬能分享一下经验吗?或者有其他更好的工具推荐?
2 回复
推荐几个常用的Golang代码生成工具:
- go generate - 内置工具,配合注释使用
- stringer - 自动生成String()方法
- gomock - 生成接口的mock实现
- protoc-gen-go - Protobuf代码生成
- sqlc - 根据SQL生成类型安全的Go代码
可根据具体需求选择合适的工具。
更多关于Golang代码生成器的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Golang中,代码生成器通常使用go generate命令和text/template包来实现。以下是一个简单的代码生成器示例:
// 生成器主文件
package main
import (
"os"
"text/template"
)
type Data struct {
StructName string
Fields []Field
}
type Field struct {
Name string
Type string
}
func main() {
data := Data{
StructName: "User",
Fields: []Field{
{Name: "ID", Type: "int"},
{Name: "Name", Type: "string"},
{Name: "Email", Type: "string"},
},
}
tmpl := `package model
type {{.StructName}} struct {
{{range .Fields}}{{.Name}} {{.Type}}
{{end}}
}
func (u *{{.StructName}}) Validate() error {
// 自动生成的验证逻辑
return nil
}
`
t := template.Must(template.New("struct").Parse(tmpl))
t.Execute(os.Stdout, data)
}
使用方法:
- 保存为
generate.go - 运行:
go run generate.go > model.go
更完整的实现方案:
- 使用
//go:generate注释:
//go:generate go run generate.go
package main
- 读取配置文件(如JSON):
{
"structs": [{
"name": "User",
"fields": [
{"name": "ID", "type": "int"},
{"name": "Name", "type": "string"}
]
}]
}
- 使用标准库flag包处理命令行参数
常用代码生成场景:
- 数据库模型生成
- API客户端生成
- 序列化/反序列化代码
- 测试用例生成
推荐工具:
stringer:自动生成String()方法mockgen:生成接口的Mock实现protoc-gen-go:Protobuf代码生成
记得在生成的代码文件头部添加"Code generated by … DO NOT EDIT."注释。

