1、使用try
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var Db *gorm.DB
type Dade1 struct {
Id int
Dade string
Dada string
}
// 初始化数据库连接
func init() {
dsn := "root:root@tcp(localhost:3306)/dade2?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
// db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("连接失败")
}
// 连接成功后,可以进行数据库操作
fmt.Println("连接成功")
Db = db
}
func main() {
var dade []Dade1
Db.Raw("select * from dade1").Find(&dade)
fmt.Println("大得")
fmt.Println(dade)
//开启事务
tx := Db.Begin()
Try(func() {
if err := tx.Table("dade1").Create(map[string]interface{}{"dade": 6666}).Error; err != nil {
// 发生错误时回滚事务
//tx.Rollback()
fmt.Println("插入失败1")
panic(err)
}
if err := tx.Table("dade1").Create(map[string]interface{}{"dade3": 6666}).Error; err != nil {
// 发生错误时回滚事务
//tx.Rollback()
fmt.Println("插入失败2")
panic(err)
}
//dades()
fmt.Println("这里")
//panic("test panic")
// 提交事务
tx.Commit()
}, func(err interface{}) {
tx.Rollback()
fmt.Println("出错了")
fmt.Println(err)
})
fmt.Println("好好")
//router := gin.Default()
//router.Run("0.0.0.0:8000")
}
func dades() {
s := 2
w := 0
dades := s / w
fmt.Println(dades)
}
func Try(fun func(), handler func(interface{})) {
defer func() {
if err := recover(); err != nil {
handler(err)
}
}()
fun()
}
2、不使用try
// 开始事务
tx := db.Begin()
// 在事务中做一些数据库操作(从这一点使用'tx',而不是'db')
if err := tx.Table("dade1").Create(map[string]interface{}{"dade": 6666}).Error; err != nil {
// 发生错误时回滚事务
tx.Rollback()
fmt.Println("插入失败1")
return
}
if err := tx.Table("dade1").Create(map[string]interface{}{"dade3": 6666}).Error; err != nil {
// 发生错误时回滚事务
tx.Rollback()
fmt.Println("插入失败2")
return
}
// 或提交事务
tx.Commit()
return
标签:封装,err,tx,fmt,try,Println,func,go,gorm
From: https://blog.csdn.net/qq_34631220/article/details/142300555