zoukankan      html  css  js  c++  java
  • RTMP协议视频平台EasyDSS开发中如何通过Go语言 gorm 框架钩子函数精简代码?

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

    EasyDSS架构绿.png

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

    u.CreateAt = time.Now()
    u.UpdateAt = time.Now()
    

      

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

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

    // 基础表
    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 等钩子函数可以实现此功能。代码如下:

    // 在创建前更新 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

     
  • 相关阅读:
    Winform中在ZedGraph中最多可以添加多少条曲线(转)
    c#委托的含义和用法
    vs2010打开vs2017工程
    C# Socket编程资源
    C# 调用打印机 打印 Excel (转)
    NPOI 教程
    C# 调用C++ DLL 的类型转换(转载版)(转)
    进程间通信(网络阅读笔记)
    NPOI 第二篇 设置样式与合并单元格(转)
    分布式事务的 6 种解决方案,写得非常好!
  • 原文地址:https://www.cnblogs.com/easydss/p/14377526.html
Copyright © 2011-2022 走看看