go-frame
https://github.com/gogf/gf
https://goframe.org/pages/viewpage.action?pageId=1114119
https://goframe.org/pages/viewpage.action?pageId=43391262
3个参考案例
https://github.com/goflyfox/gmanager
https://github.com/XiaobinZhao/my-gf
https://github.com/gogf/focus-single
1、定义数据结构,在数据库建表,配置config.yaml数据库、gf cli配置(另外建个目录放)
2、使用gf gen dao
生成 dao/do/entity
3、在api/controller/service,model里的inputModel和outputModel等处写业务代码
Insert:使用INSERT INTO语句进行数据库写入,如果写入的数据中存在主键或者唯一索引时,返回失败,否则写入一条新数据
InsertIgnore:用于写入数据时如果写入的数据中存在主键或者唯一索引时,忽略错误继续执行写入
InsertAndGetId:用于写入数据时并直接返回自增字段的ID
Id, err := dao.Asset.Ctx(ctx).Data(in).InsertAndGetId()
Update用于数据的更新,往往需要结合Data及Where方法共同使用
注意,更新一般都需要使用事务来控制
dao.Asset.Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error {
_, err := dao.Asset.
Ctx(ctx).
Data(in).
Where(dao.Asset.Columns().Id, in.Id).
Update()
return err
})
Delete方法用于数据的删除。
dao.Asset.Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error {
_, err := dao.Asset.Ctx(ctx).Where(dao.Asset.Columns().Id, id).Delete()
return err
})
条件查询
dao.Asset.Ctx(ctx).Where(dao.Asset.Columns().Id, id).Scan(&out)
All 用于查询并返回多条记录的列表/数组。
dao.Asset.Ctx(ctx).Where("id >= ?",1).All()
用struct或[]struct接收orm查询返回结果的映射规则:
#批量接收
#List []v1.AssetQueryRes
all.Structs(&out.List)
返回结果判断及处理:直接判断返回的数据是否为nil或者长度为0,或者使用IsEmpty/IsNil方法
r, err := g.Model("order").Where("status", 1).All()
if err != nil {
return err
}
if len(r) == 0 {
// 结果为空
}
r, err := g.Model("order").Where("status", 1).All()
if err != nil {
return err
}
if r.IsEmpty() {
// 结果为空
}
#cmd.go增加参数
s.SetFileServerEnabled(true) // 打开静态文件服务
s.SetIndexFolder(true) // 打开文件目录
s.AddSearchPath("/resource/public") // 添加静态资源目录,最好不要用setPath,容易覆盖其他配置,比如swagger
引入swagger-ui资源
const (
SwaggerUIPageContent = `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="SwaggerUI"/>
<title>SwaggerUI</title>
<link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@latest/swagger-ui.css" />
</head>
<body>
<div id="swagger-ui"></div>
<script src="https://unpkg.com/swagger-ui-dist@latest/swagger-ui-bundle.js" crossorigin></script>
<script>
window.onload = () => {
window.ui = SwaggerUIBundle({
url: '/api.json',
dom_id: '#swagger-ui',
});
};
</script>
</body>
</html>
注册路由,和gf自带的redoc路由/swagger错开,否则会被覆盖
group.GET("/swagger-ui", func(r *ghttp.Request) {
r.Response.Write(consts.SwaggerUIPageContent)
})