golang gorm开发架构及怎么写插件
本篇内容主要讲解“golang gorm开发架构及怎么写插件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“golang gorm开发架构及怎么写插件”吧!
1. 开发
1.1. 架构
Gorm使用可链接的API,*gorm.DB
是链的桥梁,对于每个链API,它将创建一个新的关系。
db, err := gorm.Open("postgres", "user=gorm dbname=gorm sslmode=disable")// 创建新关系db = db.Where("name = ?", "jinzhu")// 过滤更多if SomeCondition { db = db.Where("age = ?", 20)} else { db = db.Where("age = ?", 30)}if YetAnotherCondition { db = db.Where("active = ?", 1)}
当我们开始执行任何操作时,GORM将基于当前的*gorm.DB
创建一个新的*gorm.Scope
实例
// 执行查询操作db.First(&user)
并且基于当前操作的类型,它将调用注册的creating
, updating
, querying
, deleting
或row_querying
回调来运行操作。
对于上面的例子,将调用querying
,参考查询回调
1.2. 写插件
GORM本身由Callbacks
提供支持,因此您可以根据需要完全自定义GORM
1.2.1. 注册新的callback
func updateCreated(scope *Scope) { if scope.HasColumn("Created") { scope.SetColumn("Created", NowFunc()) }}db.Callback().Create().Register("update_created_at", updateCreated)// 注册Create进程的回调
1.2.2. 删除现有的callback
db.Callback().Create().Remove("gorm:create")// 从Create回调中删除`gorm:create`回调
1.2.3. 替换现有的callback
db.Callback().Create().Replace("gorm:create", newCreateFunction)// 使用新函数`newCreateFunction`替换回调`gorm:create`用于创建过程
1.2.4. 注册callback顺序
db.Callback().Create().Before("gorm:create").Register("update_created_at", updateCreated)db.Callback().Create().After("gorm:create").Register("update_created_at", updateCreated)db.Callback().Query().After("gorm:query").Register("my_plugin:after_query", afterQuery)db.Callback().Delete().After("gorm:delete").Register("my_plugin:after_delete", afterDelete)db.Callback().Update().Before("gorm:update").Register("my_plugin:before_update", beforeUpdate)db.Callback().Create().Before("gorm:create").After("gorm:before_create").Register("my_plugin:before_create", beforeCreate)
1.2.5. 预定义回调
GORM定义了回调以执行其CRUD操作,在开始编写插件之前检查它们。
Create callbacks
Update callbacks
Query callbacks
Delete callbacks
Row Query callbacks Row Query callbacks将在运行Row
或Rows
时被调用,默认情况下没有注册的回调,你可以注册一个新的回调:
func updateTableName(scope *gorm.Scope) { scope.Search.Table(scope.TableName() + "_draft") // append `_draft` to table name}db.Callback().RowQuery().Register("publish:update_table_name", updateTableName)
到此,相信大家对“golang gorm开发架构及怎么写插件”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341