gf gen dao
生成dao层的脚手架工具很好用,我遇到的坑是这样的:
生成的dao文件和同事们的不一致,生成文件成功,但是对应的Columns
是空的,虽然有这个方法,但是方法内没有值。我的版本比同事们的略高,我一直以为是这个原因,各种降级和同事保持一致的版本后还是不行。
最终发现:是配置文件中连接的数据库不对。
因为没有连接到数据库,所以取不到列值;但是因为配置文件中约定了表名,文件正常生成了。
好坑。
设置参数可不传
使用 ...interface{}
1
|
func GetXxx(xxx ... interface {}) { } |
model作为结构体类型
当我们的业务比较复杂,需要更新多个关联表时,可以把需要修改的表统一定义到一个结构体中,而不是想到一个model处理一个model。
这种思想比较好,把关联的model统一封装到一个结构体中,很清晰,也能避免有遗漏。
1
2
3
4
5
6
7
8
9
|
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类型的切片,来实现批量添加。
主程序如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//主图轮播 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的定义:
1
|
MainImgs [] string `json: "mainImgs" ` |
插入数据
batch指定了批量插入时一次插入的条数
1
2
3
4
5
6
7
8
|
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框架避坑干货的资料请关注服务器之家其它相关文章!
原文链接:https://juejin.cn/post/7081959981456556068