首页 > 其他分享 >gin错误处理,和事务处理

gin错误处理,和事务处理

时间:2024-09-20 11:21:56浏览次数:13  
标签:err fmt 事务处理 func Println gin 错误处理 panic

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	_ "github.com/go-sql-driver/mysql"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"net/http"
)

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.Use(Recovery())
	router.GET("/test", func(c *gin.Context) {
		// 模拟触发 panic
		panic("This is a panic")
		fmt.Println("进不来了")
	})
	router.GET("/test2", func(c *gin.Context) {
		// 模拟触发 panic
		fmt.Println("大得")
	})

	router.Run("0.0.0.0:8000")
}

func Recovery() gin.HandlerFunc {
	return func(c *gin.Context) {
		defer func() {
			if err := recover(); err != nil {
				fmt.Println("出错啦")
				// 可以在这里记录错误日志
				c.AbortWithStatus(http.StatusInternalServerError)
				c.JSON(200, "出错啦")
			}
		}()
		c.Next()
	}
}

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()
}

标签:err,fmt,事务处理,func,Println,gin,错误处理,panic
From: https://blog.csdn.net/qq_34631220/article/details/142300800

相关文章

  • 【集成学习|Bagging、Boosting 和 Stacking】三种常见的集成学习算法的联系与区别?以及
    【集成学习|Bagging、Boosting和Stacking】三种常见的集成学习算法的联系与区别?以及如何实现?【集成学习|Bagging、Boosting和Stacking】三种常见的集成学习算法的联系与区别?以及如何实现?附代码学习文章目录【集成学习|Bagging、Boosting和Stacking】三种常见的......
  • 构建带headers-more-nginx-module的nginx
    Dockerfile#使用官方的Alpine基础镜像FROMalpine:latestARGVERSION=1.24.0#更新包列表并安装必要的依赖RUNsed-i's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g'/etc/apk/repositoriesRUNapkupdate&&\apkadd--no-cachebuild-baselibgcczlib-dev......
  • Django+nginx+gunicorn搭建服务器后台
    @[toc]本文以系统镜像选择Ubuntu18.04的阿里云轻量应用服务器为例,使用Stacklens的开源项目远程连接服务器使用MobaXtermSSH连接阿里云服务器,根据提示输入账号和密码,进入成功后便可看到阿里云的欢迎界面。部署到服务器后就不能使用Django自带的后台服务器了,而是选择使用Nginx和Gun......
  • Nginx从入门到入土(三): 静态资源管理与代理服务
    软负载和硬负载的区别软负载均衡是通过在服务器上运行的软件应用程序来实现负载均衡的。这些软件可以是开源的,如Nginx、HAProxy,也可以是商业产品。工作原理:运行环境: 软件负载均衡器通常运行在标准的物理服务器或虚拟机上。流量分配: 它通过软件算法来分析传入的网络请求,并......
  • 通过nginx搭建文件服务器
    1.先配置nginx,配置代理,根据路径跳转到linux存放共享文件目录:autoindexon;#显示目录autoindex_exact_sizeon;#显示文件大小,这个变量控制文件大小精确展示还是友好展示,on精确展示,展示的是字节数,false展示的是MBautoindex_localtimeon;#显示文件时间server{ listen......
  • Hugging Face VSCode 端点服务器:为代码生成注入新活力
    HuggingFaceVSCode端点服务器:为代码生成注入新活力在当今的软件开发领域,代码生成工具已经成为提高开发效率和质量的重要手段。随着人工智能技术的不断进步,基于自然语言处理(NLP)的代码生成模型逐渐崭露头角。HuggingFace作为领先的NLP技术提供商,其强大的模型库和开源社区为开发者......
  • 全网最简单ubuntu18.04+mysql5.7+nginx+uwsgi一次性部署Django!!!!!
    ubuntu18.04,自带python3.6,mysql5.7 Nginx*******************************1.安装nginx apt-getupdate apt-getupgrade apt-getinstallnginx 2.修改端口为81(可选),是一个链接 /etc/nginx/sites-enabled/default3.servicenginxreload4.servicenginx......
  • Nginx配置
    终极Nginx配置指南(全网最详细)前言对于自己上线项目的前端来说,nginx也是必须要了解和熟悉的,查了很多的nginx文章,看着写的都很详细,但是却没有了整体的概念。这里就重新梳理一遍,也理清思路。我们在安装nginx之后,会自动生成很多的文件,但是nginx.conf这个文件是我们的核心,如......
  • 深度学习-17-深入理解BERT基于Hugging Face的模型训练步骤
    文章目录1大模型的架构1.1Transformer架构1.2BERT(双向Transformer架构)1.3GPT(GenerativePretrainedTransformer)1.4T5(Text-To-TextTransferTransformer)1.5DistilBERT1.6不同架构的优缺点对比2HuggingFace模型训练步骤2.1平台功能2.1......
  • 【Java基础】ThreadLocal<LoginUser>:存储登录用户信息
    ......