通过实战总结的 使用GoFrame小技巧

news2024/12/24 0:03:50

文章目录

  • gf gen dao
  • 设置参数可传可不传
  • model作为结构体类型
  • 模型关联
  • 添加数据
    • 主程序如下:
      • gomeGoods.MainImgs的定义:
    • 批量插入数据
  • 配置插件自动生成service
  • 总结
  • 一起学习

有朋友问我能不能搞一个GoFrame技巧篇,让新手少踩坑的那种。今天他来了!

gf gen dao

生成dao层的脚手架工具很好用,我遇到的坑是这样的:

生成的dao文件和同事们的不一致,生成文件成功,但是对应的Columns方法是空的。虽然有这个方法,但是方法内没有值。我的版本比同事们的略高,我一直以为是这个原因,各种降级和同事保持一致的版本后还是不行。

最终发现:是配置文件中连接的数据库不对。

因为没有连接到数据库,所以取不到列值;但是因为配置文件中约定了表名,文件正常生成了。

如果你也遇到了类似问题,去排查一下配置文件吧。

设置参数可传可不传

这个场景和是否使用GoFrame框架没关系,如果你也需要设置这个参数可传可不传,也能这么搞:

使用 ...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
}

模型关联

关于模型关联,官方是这么说的:

GoFrame的ORM没有采用其他ORM常见的BelongsTo, HasOne, HasMany, ManyToMany这样的模型关联设计,这样的关联关系维护较繁琐,例如外键约束、额外的标签备注等,对开发者有一定的心智负担。
因此gf框架不倾向于通过向模型结构体中注入过多复杂的标签内容、关联属性或方法,并一如既往地尝试着简化设计,目标是使得模型关联查询尽可能得易于理解、使用便捷。

我也花时间整理了自己在项目中的示例,但是发现自己整理的例子没有官网的好理解,所以最终我还是把自己的例子删掉了。

「模型关联」这部分比较硬核且实用,但是也确实有理解成本。

大家还是看官方示例吧:

「模型关联-动态关联-ScanList」:https://goframe.org/pages/viewpage.action?pageId=1114326

「模型关联-静态关联-With特性」:https://goframe.org/pages/viewpage.action?pageId=7297190

我也会把官方示例放到阅读原文中,方便大家去查看。

添加数据

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
}

配置插件自动生成service

如果你在用goframe V2.1 以上版本,生成service强烈建议配置goland插件,而不是每次修改logic后手动敲脚本。

配置方式如下:

配置文件链接:https://goframe.org/pages/viewpage.action?pageId=49770772&preview=/49770772/49770777/watchers.xml

当自动生成的文件报错,或者出现一些“神奇的问题”,建议把生成的文件删除掉。在对应的logic代码空白处随便敲个回车或者空格就能生成新的service文件。

注意:千万不要手动修改自动生成的代码。(因为自己修改的代码后期肯定会被覆盖掉)

总结

纸上得来终觉浅,觉知此事要躬行。

编程是一门手艺活,一定多动手,重实践,才能获得长足的进步。

一起学习

欢迎在CSDN私信我,如果没能及时回复,欢迎扫下方公众号关注我:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库-范式例题

目录 1、请简述满足1NF、2NF和3NF的基本条件。并完成下题:某信息一览表如下:其是否满足3NF,若不满足将其化为符合3NF的关系。 解:     1NF: 属性都是不可分割的数据项 2NF: 不存在部分函数依赖,存在传递函数依赖。 2NF: 不存在

算法复杂度分析中的渐近分析(基于输入大小)

为什么要进行性能分析? 有许多重要的事情需要注意,例如用户友好性、模块化、安全性、可维护性等。为什么要担心性能?答案很简单,只有当我们有性能时,我们才能拥有上述所有东西。因此,性能就像货币&#xf…

磷酸化多肽Asp-Arg-Val-Tyr(PO3H2)-Ile-His-Pro-Phe、129785-85-9

在血管平滑肌细胞中有多种作用,包括正常动脉的收缩,培养的细胞或病变血管的肥大或增生等。 编号: 200676 中文名称: 八肽DRV-pTyr-IHPF CAS号: 129785-85-9 单字母: H2N-DRV-pTyr-IHPF-OH 三字母: H2N-Asp-Arg-Val-Tyr(PO3H2)-Ile-His-Pro-Phe-COOH 氨基…

MySQL——进阶

第1章 存储引擎 1.1 MySQL体系结构 1.2 存储引擎介绍 定义:存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式 。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。我们可以在创建表的时候,来指定…

msfconsole之制作windows木马并成功获取shell

msfconsole之制作windows木马并成功获取shell 一、工具简介     msfconsole 简称 msf 是一款常用的安全测试工具,包含了常见的漏洞利用模块和生成各种木马,其提供了一个一体化的集中控制台,通过msfconsole,你可以访问和使用所…

软考高级系统架构师_计算机组成与结构---备考笔记004

奇校验和海明码考的比较多,可以看到: 奇校验:比如有个11001 这个要进行校验,那么,需要在后面添加什么?注意,要添加0,因为奇校验,是奇数个1,这里已经有3个1了,所以后面要加0,变成110010 这样 然后我们再来看,如

01-SpringMVC项目构建

Overview 梳理了创建基于SpringMVC的项目创建流程和注意点,防止遗忘 1. 创建一个空项目 2. 添加新模块 3. 在pom文件中指定打包方式并刷新 4. 将模块目录结构改造成web项目 这里的web配置是你在pom文件中指定war的打包方式后就会出现的,当然没出现也可…

迅为3A5000_7A2000开发板龙芯全国产处理器LoongArch架构核心方案

1.全国产设计方案 从里到外 100% 全国产 从CPU自主指令系统到开发板每一个元器件,做到100%全国产化。 2.产品开发更快捷 PCIE 32路 相比同类嵌入式板卡仅2到4路的PCIE, 这款核心板可以支持多达32路的PCIE 3.0接口 3.工业化标准设计 遵循COM E…

数据库-mysql架构与sql执行原理(上)(一)

目录 一、一条查询的sql他是怎么样去执行的呢? 二、建立链接 同步 异步 三、连接方式 长链接 短链接 四、通信协议 Unix socket TCP/IP 共享内存 五、通信方式 单工 半双工 全双工 六、缓存 七、解析 八、预处理器 九、优化器 十、查询执行引擎…

ASEMI肖特基二极管MBR15200FAC参数,MBR15200FAC图片

编辑-Z ASEMI肖特基二极管MBR15200FAC参数: 型号:MBR15200FAC 最大重复峰值反向电压(VRRM):200V 最大RMS电桥输入电压(VRMS):140V 最大直流阻断电压(VDC&#xff09…

智慧零售解决方案-最新全套文件

智慧零售解决方案-最新全套文件一、建设背景二、建设思路三、建设方案四、获取 - 智慧零售全套最新解决方案合集一、建设背景 传统零售业发展趋势分析: (1)市场竞争日益激烈 零售业的发展一直是一个竞争性强的产业,这个市场的发…

数据结构之堆

堆: 堆是一颗完全二叉树,分为大根堆和小根堆两种。大根堆:根节点大于等于左右节点;小根堆:根节点小于等于左右节点。所以大根堆的根节点是最大值,小根堆的根节点是最小值。 c中priority_queue可以用来声明…

Axure原型创建折线、柱状等图形,引用echarts

1、在echarts网站选择对应的统计图形: 网址:Examples - Apache ECharts 2、对代码进行编辑,使其适配自己的业务。 3、在Axure中创建一个基本元件矩形。命名为:test 4、选择交互--载入时--打开连接--Fx 5、在插入变量中增加如下…

SVN windows安装及初步使用;及初次连接版本库、提交、还原、比对操作说明文档

派昂医药-SVN版本库说明总览&#xff1a; 1.说明 2.版本库地址 3.托管项目明细 4.SVN客户端安装 5.SVN-Win端版本操作 6.SVN客户端浏览 1.说明&#xff1a; <1、协议 SVN私有协议 <2、PC系统字符集要求 中文GBK编码&#xff1b;中文以外UTF-8编码&#xff0c;如乱码…

中国市场杂志社中国市场编辑部2022年第32期目录

前沿理论 新冠肺炎疫情下跨境冷链物流的新思考——以大连冷链业疫情为例 廖燕莲;谷玉红;尚书山; 1-3《中国市场》投稿&#xff1a;cnqikantg126.com 数字经济背景下数字服务税问题探析 李瑞玲; 4-6 我国工业能源效率提升的阻碍及其对策探究 韩洁平;田振东;张诗雅; …

DJ12-1 8086系列指令系统-2 数据传送指令

目录 1. 通用数据传送指令 &#xff08;1&#xff09;MOV 一般数据传送指令 &#xff08;2&#xff09;堆栈操作指令 &#xff08;3&#xff09;XCHG 交换指令 &#xff08;4&#xff09;XLAT 查表指令 &#xff08;5&#xff09;CBW 和 CWD 字位扩展指令 2. 输入输出指…

8点FFT实现全教程

个人认为编写8点FFT的编写,不要过分关注理论,重要的是理解整个流程。 参考文章: matlab 8点fft蝶形图,基2时抽8点FFT的matlab实现流程及FFT的内部机理_罗漫的博客-CSDN博客前言本来想用verilog描述FFT算法,虽然是8点的FFT算法,但写出来的资源用量及时延也不比调用FFT IP…

【第五部分 | JS WebAPI】5:1W字详解Bom对象

目录 | Bom概述 | window 、Bom、Dom 的关系 | window的load事件&#xff1a;把JS写进head里 如何把 JS 代码写到head里&#xff08;页面加载事件 onload&#xff09; 比onload更高效的加载事件 DOMContentLoaded | window的resize事件&#xff08;窗口大小改变的时候触发…

vue移动端高德地图的使用及实现最简单的地图功能

目录 一、创建应用获取key 1、进入开放平台&#xff0c;按步骤注册成为开发者 2、 登录之后&#xff0c;点击头像&#xff0c;进入「应用管理」 页面「创建新应用」 3、 为应用添加 Key 二、配置 1、在public下的index.html中添加 2、 JSAPI key和安全密钥的使用 方式一…

论文阅读09——《Deep Fusion Clustering Network》

论文阅读09——《Deep Fusion Clustering Network》 原文链接&#xff1a;论文阅读09——《Deep Fusion Clustering Network》 作者&#xff1a;Wenxuan Tu, Sihang Zhou, Xinwang Liu, Xifeng Guo, Zhiping Cai, En zhu, Jieren Cheng 发表时间&#xff1a;2021年5月18日 论文…