GoFrame框架使用避坑指南和实践干货
gf gen dao
生成dao层的脚手架工具很好用,我遇到的坑是这样的:
生成的dao文件和同事们的不一致,生成文件成功,但是对应的Columns
是空的,虽然有这个方法,但是方法内没有值。我的版本比同事们的略高,我一直以为是这个原因,各种降级和同事保持一致的版本后还是不行。
最终发现:是配置文件中连接的数据库不对。
因为没有连接到数据库,所以取不到列值;但是因为配置文件中约定了表名,文件正常生成了。
好坑。
设置参数可不传
使用 ...interface{}
func GetXxx(xxx ...interface{}) { }
model作为结构体类型
当我们的业务比较复杂,需要更新多个关联表时,可以把需要修改的表统一定义到一个结构体中,而不是想到一个model处理一个model。
这种思想比较好,把关联的model统一封装到一个结构体中,很清晰,也能避免有遗漏。
type GoodsRelevantItem struct {
Shop *model.Shops
Brand *model.GoodsBrand
Desc *model.GoodsDescription
Cover []*model.GoodsCover
Attributes []*model.GoodsAttributes
Goods *model.Goods
DisCategory []*model.DisCategory
}
使用with关联取值而不是join
能用with的一定用with关联取值,而不是用join。
发现自己整理的栗子没有官网的好,大家还是看官网吧: goframe.org/pages/viewp…
不使用结构体批量添加数据
goframe非常灵活,插入的数据可以是结构体也可以是map,也可以是map类型的切片,来实现批量添加。
主程序如下:
//主图轮播
goodsImgs := []map[string]interface{}{} //图片集
for k, img := range gomeGoods.MainImgs {
goodsImg := map[string]interface{}{} //图片
goodsImg["cover"] = "Http:" + img
goodsImg["goods_id"] = GConv.Int(goodsDetail["goods_id"])
goodsImg["sort"] = k
goodsImgs = append(goodsImgs, goodsImg)
}
//添加主图
err = m.AddGoodsCover(ctx, tx, goodsImgs)
if err != nil {
err = errors.New("添加商品主图失败")
return err, 0
}
gomeGoods.MainImgs的定义:
MainImgs []string `JSON:"mainImgs"`
插入数据
batch指定了批量插入时一次插入的条数
func (m *goodsMessageService) AddGoodsCover(ctx context.Context, tx *gdb.TX, goodsImgs g.List) (err error) {
if len(goodsImgs) == 0 {
return errors.New("暂无数据")
}
_, err = dao.GoodsCover.TX(tx).Ctx(ctx).Batch(len(goodsImgs)).Insert(goodsImgs)
checkErr(err, "UpdateGoodsCover")
return
}
以上就是GoFrame框架使用避坑指南和实践干货的详细内容,更多关于GoFrame框架避坑干货的资料请关注其它相关文章!
相关文章