Golang代码生成器

最近在学习Golang,想找一个好用的代码生成器工具,大家有什么推荐的吗?最好能支持以下功能:

  1. 根据数据库表结构自动生成Model代码
  2. 支持生成CRUD基础操作
  3. 能自定义模板
  4. 有比较好的错误处理机制

目前看到有gormgen、xo这些工具,但不太确定哪个更适合实际项目使用。有用过的大佬能分享一下经验吗?或者有其他更好的工具推荐?

2 回复

推荐几个常用的Golang代码生成工具:

  1. go generate - 内置工具,配合注释使用
  2. stringer - 自动生成String()方法
  3. gomock - 生成接口的mock实现
  4. protoc-gen-go - Protobuf代码生成
  5. 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)
}

使用方法:

  1. 保存为generate.go
  2. 运行:go run generate.go > model.go

更完整的实现方案:

  1. 使用//go:generate注释:
//go:generate go run generate.go
package main
  1. 读取配置文件(如JSON):
{
    "structs": [{
        "name": "User",
        "fields": [
            {"name": "ID", "type": "int"},
            {"name": "Name", "type": "string"}
        ]
    }]
}
  1. 使用标准库flag包处理命令行参数

常用代码生成场景:

  • 数据库模型生成
  • API客户端生成
  • 序列化/反序列化代码
  • 测试用例生成

推荐工具:

  • stringer:自动生成String()方法
  • mockgen:生成接口的Mock实现
  • protoc-gen-go:Protobuf代码生成

记得在生成的代码文件头部添加"Code generated by … DO NOT EDIT."注释。

回到顶部