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

gin错误处理,和事务处理

时间:2024-09-20 11:21:56浏览次数:15  
标签: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

相关文章

  • Django+nginx+gunicorn搭建服务器后台
    @[toc]本文以系统镜像选择Ubuntu18.04的阿里云轻量应用服务器为例,使用Stacklens的开源项目远程连接服务器使用MobaXtermSSH连接阿里云服务器,根据提示输入账号和密码,进入成功后便可看到阿里云的欢迎界面。部署到服务器后就不能使用Django自带的后台服务器了,而是选择使用Nginx和Gun......
  • 通过nginx搭建文件服务器
    1.先配置nginx,配置代理,根据路径跳转到linux存放共享文件目录:autoindexon;#显示目录autoindex_exact_sizeon;#显示文件大小,这个变量控制文件大小精确展示还是友好展示,on精确展示,展示的是字节数,false展示的是MBautoindex_localtimeon;#显示文件时间server{ listen......
  • Hugging Face VSCode 端点服务器:为代码生成注入新活力
    HuggingFaceVSCode端点服务器:为代码生成注入新活力在当今的软件开发领域,代码生成工具已经成为提高开发效率和质量的重要手段。随着人工智能技术的不断进步,基于自然语言处理(NLP)的代码生成模型逐渐崭露头角。HuggingFace作为领先的NLP技术提供商,其强大的模型库和开源社区为开发者......
  • 深度学习-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>:存储登录用户信息
    ......