您现在的位置是:网站首页> 编程资料编程资料

GoFrame框架使用避坑指南和实践干货_Golang_

2023-05-26 580人已围观

简介 GoFrame框架使用避坑指南和实践干货_Golang_

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框架避坑干货的资料请关注其它相关文章!

-六神源码网