首頁 > 軟體

GoFrame框架使用避坑指南和實踐乾貨

2022-06-10 14:02:28

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框架避坑乾貨的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com