脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - GoFrame框架使用避坑指南和实践干货

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

2022-10-18 11:13王中阳Go Golang

这篇文章主要为大家介绍了GoFrame框架使用避坑指南和实践干货,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

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

延伸 · 阅读

精彩推荐
  • GolangGolang如何调用windows下的dll动态库中的函数

    Golang如何调用windows下的dll动态库中的函数

    这篇文章主要介绍了Golang如何调用windows下的dll动态库中的函数方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    uxff8042021-06-20
  • Golangwind10 idea中 go 开发环境搭建教程图解

    wind10 idea中 go 开发环境搭建教程图解

    这篇文章主要介绍了wind10 idea中 go 开发环境搭建过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要...

    cxdn_czj2042020-07-26
  • GolangGo语言中接口组合的实现方法

    Go语言中接口组合的实现方法

    这篇文章主要介绍了Go语言中接口组合的实现方法,实例分析了接口中包含接口的实现技巧,需要的朋友可以参考下 ...

    脚本之家5142020-04-13
  • GolangGo语言--切片(Slice)详解

    Go语言--切片(Slice)详解

    这篇文章主要介绍了Go语言--切片(Slice),Go 语言切片是对数组的抽象,下面文章小编将为大家详细介绍该内容,需要的朋友可以参考下,希望对你有所帮...

    归子莫10972021-11-19
  • GolangGolang共享变量如何解决问题

    Golang共享变量如何解决问题

    协程之间的通信只能够通过通道。但是我们习惯于共享变量,而且很多时候使用共享变量能让代码更简洁。那么Golang共享变量如何解决问题,感兴趣的可以...

    rayjun10962022-01-20
  • Golang详解Go语言运用广度优先搜索走迷宫

    详解Go语言运用广度优先搜索走迷宫

    广度优先搜索是从图中的某一顶点出发,遍历每一个顶点时,依次遍历其所有的邻接点,再从这些邻接点出发,依次访问它们的邻接点,直到图中所有被访...

    盛开的太阳9592021-08-11
  • GolangGo iota关键字与枚举类型实现原理

    Go iota关键字与枚举类型实现原理

    这篇文章主要介绍了Go iota关键字与枚举类型实现原理,iota是go语言的常量计数器,只能在常量的表达式中使用,更多相关内容需要的小伙伴可以参考一下...

    树獭叔叔11812022-07-31
  • Golang关于Go 是传值还是传引用?

    关于Go 是传值还是传引用?

    这篇文章主要讨论Go语言 是传值还是传引用?文章先从Go 官方的定义展开,随后是传值和传引用得介绍到map 和 slice得区别,需要的小伙伴可以参考一下文章得...

    煎鱼11822021-11-22