前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RTMP协议视频平台EasyDSS如何通过Go语言gorm框架钩子函数精简代码?

RTMP协议视频平台EasyDSS如何通过Go语言gorm框架钩子函数精简代码?

原创
作者头像
TSINGSEE青犀视频
修改2021-02-05 14:43:40
4090
修改2021-02-05 14:43:40
举报
文章被收录于专栏:TSINGSEE青犀视频

EasyDSS视频平台除了提供网页直播外,还可上传视频进行点播,上传视频后一键生成视频地址,以供用户分享、嵌入到网站、产品软件系统中。

EasyDSS架构绿.png
EasyDSS架构绿.png

在EasyDSS开发过程中,将数据写入到数据库时,有大量相同的操作。如以下两个步骤设置更新时间和创建时间。

代码语言:javascript
复制
u.CreateAt = time.Now()
u.UpdateAt = time.Now()

因为很多地方需要更新这两个字段,在整个项目中出现了很多相同的代码,都是以上两行代码。因此为了精简代码,优化结构,可以使用gorm 库的hooks钩子函数功能进行优化。

gorm 为 Go 语言的数据库 orm 框架,需要在项目中创建对应的结构体,结构体如下:

代码语言:javascript
复制
// 基础表
type Table struct {
   // id 为字符串,使用 uuid 或者 xid 进行设置,为了后期做分布式的可能做此处理,因此不使用 int 类型
   ID       string    `json:"id" gorm:"PRIMARY_KEY;Size:32;NOT NULL;"`
   CreateAt time.Time `json:"createAt"  gorm:"type:datetime"`
   UpdateAt time.Time `json:"updateAt"  gorm:"type:datetime"`
}

现在的需求是希望在创建和更新数据的时候自动更新 CreateAt 和 UpdateAt 字段,而不用每次都显示调用赋值语句。gorm1.20.x 以上的版本中提供了 BeforeCreate、BeforeUpdate、AfterCreate 等钩子函数可以实现此功能。代码如下:

代码语言:javascript
复制
// 在创建前更新 create_at 字段
func (u *Table) BeforeCreate(tx *gorm.DB) (err error) {
   u.CreateAt = time.Now()
   u.UpdateAt = time.Now()
   return
}
 
// 在更前前更新 update_at 字段
func (u *Table) BeforeUpdate(tx *gorm.DB) (err error) {
   u.UpdateAt = time.Now()
   return
}

以上代码就实现了对应的功能,在创建数据和更新数据之前,均会更新已经设置好的字段。

70.png
70.png

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档