美文网首页
go如何使用ast进行代码自动生成

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

作者: 五岁小孩 | 来源:发表于2023-04-10 21:19 被阅读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)
    }

}

相关文章

网友评论

      本文标题:go如何使用ast进行代码自动生成

      本文链接:https://www.haomeiwen.com/subject/gsdkxdtx.html