如何使用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)
}
}