

一个简单的 GORM 通用事务接口
source link: https://www.sulinehk.com/post/a-simple-gorm-general-transaction-interface/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一个简单的 GORM 通用事务接口
本文介绍了一个简单的 GORM 通用事务接口。
import (
"database/sql"
"log"
"gorm.io/gorm"
)
// Transaction 指定事务必须的三种方法
type Transaction interface {
Begin(*gorm.DB) (*gorm.DB, error)
Rollback(*gorm.DB) error
Commit(*gorm.DB) error
}
type handler func(db *gorm.DB) error
// Do 在事务中执行函数
func Do(db *gorm.DB, transaction Transaction, call handler) error {
t, err := transaction.Begin(db)
if err != nil {
return err
}
// panic 时回滚,并打印日志
defer func() {
if err := transaction.Rollback(t); err != nil && err != sql.ErrTxDone {
log.Fatalf("Rollback err: %v", err)
}
}()
if err := call(t); err != nil {
return err
}
// 没有错误才 commit
if err := transaction.Commit(t); err != nil {
return err
}
return nil
}
详细说明请看代码注释。
Recommend
-
45
golang 官方的那个操作mysql的有点麻烦所以就使用了gorm,下面就gorm的使用做下简单介绍 下载gorm: go get -u github.com/jinzhu/gorm 在项目中引入gorm: import ( "github.com/jinzhu/...
-
16
点击上方“ 搜云库技术团队 ”关注,选择“ 设为...
-
18
开个通用的 HTTP 接口,让前端写 SQL 咋样?陶文problem solver
-
11
目录: 1.Bug背景介绍 2.Bug分析过程 2.1. 百度搜索解决方案 2.2. 根据关键错误信息分析源代...
-
14
一个简单的 Golang 分页查询通用接口2020-11-18Golang本文介绍了一个简单的 Golang 分页查询通用接口。
-
10
在定义C++, C通用接口函数时让C++接口支持默认参数 在SOUI4的开发中,所有SOUI核心对象...
-
8
作为后端开发人员,我们总是在编写各种API,无论是为前端web提供数据支持的HTTP REST API ,还是提供内部使用的RPC API。这些API在服务初期可能表现不错,但随着用户数量的增长,一开始响应很快的API越来越慢,直到用户抱怨:“你的系统太...
-
4
无法通用!曝苹果新品Type C接口已加密 安卓所用不适配 评论(5)
-
6
一切都源于我开发中发现的一个bug,简单描述就是 先insert 了一条数据,然后开启了一个协程,直接进行查询刚才插入的数据,竟然没查到。 func Test(t *testing.T) { record := &model.ContentCoursePracticeRecord{...
-
4
GnePro是开源项目GNE的付费版,能够实现如下功能: 输入任意文章页面的URL,返回标题/作者/正文/发布时间/图片/面包屑等一系列信息 支持异步加...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK