go如何使用ast进行代码自动生成

2023-04-10  本文已影响0人  五岁小孩

如何使用ast解析结构体然后自动生成dao代码

现在有数据结构如下,需要通过ast解析然后自动生成dao代码

type Person struct {
    Id   uint64 `json:"id" gorm:"primary_key"`
    Name string `json:"name"`
    Age  int `json:"age"`
}

go提供的ast语法还是比较难理解的,
因此这里引用了开源工具包 github.com/cxiaoji/go-ast


import (
    "fmt"
    goast "github.com/cxiaoji/go-ast"
)

type Person struct {
    Id   uint64 `json:"id" gorm:"primary_key"`
    Name string `json:"name"`
    Age  int    `json:"age"`
}
func main() {
    var filePath = "./main.go"
    h := goast.NewAstHelper(filePath) // 读取当前文件
    fileDesc, err := h.GetFileDesc()  // 解析当前文件ast
    if err != nil {
        fmt.Println(err)
        return
    }
    for _, sd := range fileDesc.StructDescs {
    // 这里只是演示,真正自动生成代码不可能靠替换,可以使用go template 语法
        var tpl = ` func Create%s(db *gorm.DB,p *%s)error  {
                        return db.Create(p).Error
                    }
                    `
        tpl = fmt.Sprintf(tpl, sd.Name, sd.Name)
        fmt.Println("tpl:", tpl)
    }

}
上一篇 下一篇

猜你喜欢

热点阅读