一个简单的代码生成器(Gint)
Gint提供从实体到CURD-L的能力,存储层基于Gorm实现,server使用了Gin框架。
Gint初始化
新建项目
go mod init ginttest
cd ginttest
go mod tidy
执行Gint初始化,可以方便的得到一个Schema定义的框架。
go run gitee.com/wennmu/gint.git init
生成的代码目录:
--gint
----gint.yml // schema定义文件
----generate.go // 生成代码脚本
定义实体以及边
在gint.yml配置文件中增加实体定义
varsion: 1
schemas:
- name: User
fields:
- name: name
ftype: string
anno:
- name: Addr
ftype: string
anno:
- name: Phone
ftype: string
anno:
edges:
- from: Team
to: Order
mode: 2
生成代码
执行命令生成schema的代码。
go generate ./...
启动服务
新建main.go添加如下代码:
package main
import (
"fmt"
"ginttest/gint"
"github.com/gin-gonic/gin"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"log"
)
func main() {
db, err := gint.Open(sqlite.Open("gint.db"), &gorm.Config{})
if err != nil {
log.Fatal("open db err")
}
if err = db.CreateMigrate(); err != nil {
log.Fatal("migrate err")
}
r := gin.Default()
gint.RegisterGintRouter(r, "api", func(c *gin.Context) {
fmt.Println("中间件")
c.Next()
})
err = r.Run(":8000")
if err != nil {
panic(err)
return
}
}
Gint仓库
Github: github.com/wennmu/gint.git
Gitee: gitee.com/wennmu/gint.git