首页 > 其他分享 >go的事务操作,封装try

go的事务操作,封装try

时间:2024-09-20 11:23:07浏览次数:3  
标签:封装 err tx fmt try Println func go gorm

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

相关文章

  • go注册中心Eureka,注册到线上和线下,都可以访问
    go注册中心Eureka,注册到线上和线下,都可以访问本地通过127访问,线上通过内网ip访问packagemainimport( "github.com/SimonWang00/goeureka" "github.com/gin-gonic/gin" "wbGo/controller" "wbGo/task")funcmain(){ //注册到Eureka registerToEurek......
  • VS(visual studio) C++ 封装dll,以及其隐式调用与显式调用(静态\动态)
    DLL介绍DLL(动态链接库,DynamicLinkLibrary)是一种可执行文件,它包含可以在其他程序中调用的函数和数据。他是Windows操作系统中的一个重要概念,用于代码共享和模块化。特点代码共享:多个程序可以同时使用同一个DLL文件,而不需要将其代码编译到每个程序中。这样可以节省磁盘空间和......
  • 基于django的大学生体育测评管理系统的设计与实现-毕业设计源码25982
    目录摘要1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.1.1经济可行性分析2.1.2技术可行性分析2.1.3操作可行性分析2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2.2.4......
  • 【MATLAB源码-第227期】基于matlab的北方苍鹰优化算法(NGO)机器人栅格路径规划,输出做
    操作环境:MATLAB2022a1、算法描述鼠群优化算法(RatSwarmOptimization,RSO)简介鼠群优化算法(RatSwarmOptimization,RSO)是一种模仿鼠类群体觅食行为的优化算法。该算法属于群体智能算法,通过模拟鼠群在复杂环境中寻找食物的行为,来解决各种优化问题。鼠类在觅食过程中表现......
  • uniapp 封装请求方法
    目录uni.request()封装uni.showLoading()封装使用request() 方法uni.request()封装//request.jsconstBASE_URL='https://tea.qingnian8.com/api';//请求函数exportconstrequest=(option={})=>{ //解构并赋初始值 let{ url, data={}, ......
  • GoogleNet模型原理及Pytorch实现
    GoogleNet模型,也被称为Inception-v1,是由Google团队在2014年提出的一种深度卷积神经网络架构,专门用于图像分类和特征提取任务。该模型在ILSVRC(ImageNetLargeScaleVisualRecognitionChallenge)比赛中取得了优异成绩,其创新的核心在于引入了“Inception”模块。以下是对Goog......
  • Study Plan For Algorithms - Part35
    1.x的平方根给定一个非负整数x,计算并返回x的算术平方根。classSolution:defmySqrt(self,x:int)->int:ifx==0:return0left,right=1,xwhileleft<=right:mid=left+(right-left)//2......
  • asp sql封装成函数
    <%'定义数据库连接字符串DimconnectionStringconnectionString="Provider=sqloledb;DataSource=你的数据库服务器;InitialCatalog=你的数据库名;UserId=你的用户名;Password=你的密码;"'定义数据库连接和命令对象Dimconn,cmd,rs'定义函数来执行SQL查询并返回记录集F......
  • Study Plan For Algorithms - Part36
    1.简化路径给定一个字符串path,表示指向某一文件或目录的Unix风格绝对路径(以'/'开头),请将其转化为更加简洁的规范路径。在Unix风格的文件系统中规则如下:一个点'.'表示当前目录本身。此外,两个点'..'表示将目录切换到上一级(指向父目录)。任意多个连续的斜杠(即,'//......
  • Study Plan For Algorithms - Part34
    1.二进制求和给定两个二进制字符串a和b,以二进制字符串的形式返回它们的和。classSolution:defaddBinary(self,a:str,b:str)->str:i=len(a)-1j=len(b)-1carry=0result=[]whilei>=0orj>=0or......