golang gorm开发架构及写插件示例
目录
1. 开发1.1. 架构1.2. 写插件1.2.1. 注册新的callback1.2.2. 删除现有的callback1.2.3. 替换现有的callback1.2.4. 注册callback顺序1.2.5. 预定义回调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开发架构及写插件示例的详细内容,更多关于golang gorm开发架构写插件的资料请关注脚本之家其它相关文章!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?