当前位置:网站首页>Go语学习笔记 - gorm使用 - gorm处理错误 Web框架Gin(十)
Go语学习笔记 - gorm使用 - gorm处理错误 Web框架Gin(十)
2022-08-02 02:52:00 【免费的东西】
学习笔记,写到哪是哪。
接着上一篇文章:Go语学习笔记 - gorm使用 - 原生sql、命名参数、Rows、ToSQL | Web框架Gin(九)_的博客-CSDN博客
目前gorm对数据库的一些操作基本了解。
本篇主要测试一下gorm的异常处理方式。
项目地址:github地址
可以先看看gorm定义的异常,代码如下:
var (
// ErrRecordNotFound record not found error
ErrRecordNotFound = logger.ErrRecordNotFound
// ErrInvalidTransaction invalid transaction when you are trying to `Commit` or `Rollback`
ErrInvalidTransaction = errors.New("invalid transaction")
// ErrNotImplemented not implemented
ErrNotImplemented = errors.New("not implemented")
// ErrMissingWhereClause missing where clause
ErrMissingWhereClause = errors.New("WHERE conditions required")
// ErrUnsupportedRelation unsupported relations
ErrUnsupportedRelation = errors.New("unsupported relations")
// ErrPrimaryKeyRequired primary keys required
ErrPrimaryKeyRequired = errors.New("primary key required")
// ErrModelValueRequired model value required
ErrModelValueRequired = errors.New("model value required")
// ErrInvalidData unsupported data
ErrInvalidData = errors.New("unsupported data")
// ErrUnsupportedDriver unsupported driver
ErrUnsupportedDriver = errors.New("unsupported driver")
// ErrRegistered registered
ErrRegistered = errors.New("registered")
// ErrInvalidField invalid field
ErrInvalidField = errors.New("invalid field")
// ErrEmptySlice empty slice found
ErrEmptySlice = errors.New("empty slice found")
// ErrDryRunModeUnsupported dry run mode unsupported
ErrDryRunModeUnsupported = errors.New("dry run mode unsupported")
// ErrInvalidDB invalid db
ErrInvalidDB = errors.New("invalid db")
// ErrInvalidValue invalid value
ErrInvalidValue = errors.New("invalid value, should be pointer to struct or slice")
// ErrInvalidValueOfLength invalid values do not match length
ErrInvalidValueOfLength = errors.New("invalid association values, length doesn't match")
// ErrPreloadNotAllowed preload is not allowed when count is used
ErrPreloadNotAllowed = errors.New("preload is not allowed when count is used")
)
编写一个接口来测试一下异常。
在student_service下新增TestError方法。
方法代码如下:
//测试gorm异常
func (t StudentImpl) TestError() rsp.ResponseMsg {
log.Logger.Info("测试gorm异常")
_db := mysql.GetDB()
var _student db_entity.Student
if _err := _db.Where("del_flag = 1").First(&_student).Error; _err != nil {
if errors.Is(_err, gorm.ErrRecordNotFound) {
fmt.Println("error is ErrRecordNotFound")
}
log.Logger.Panic("error -> ", log.Any("error", _err))
}
log.Logger.Debug("student -> ", log.Any("student", _student))
return *rsp.SuccessMsg("测试成功")
}
如果sql无法获取到record,会报出ErrRecordNotFound异常。
controller层增加接口代码,如下:
//测试gorm异常
func (s StudentController) TestError(context *gin.Context) {
log.Logger.Info("测试gorm异常接口")
_rsp := services.StudentServ.TestError()
context.JSON(http.StatusOK, _rsp)
}
验证一下接口执行后的打印输出。

可以看到是全局捕获的异常响应报文。

小结
在项目开发中,异常处理是比较必要的。
最近有点忙,也有所体悟,有时候需要把压力释放一下,但是需要合理有效的方式。有时候需要把压力往身边分担下,并不是什么时候都需要扛下所有。

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- Redis主从、哨兵、 Cluster集群一锅端!
- Duplicate entry ‘XXX‘ for key ‘XXX.PRIMARY‘解决方案。
- Recursively check if a configuration item has changed and replace it
- 忽晴忽雨
- 利用WebShell拿Shell技巧
- 面试必备!TCP协议经典十五连问!
- AcWing 1285. 单词 题解(AC自动机)
- 生成器知道鉴别器在无条件GANs中应该学习什么
- 【LeetCode】1374. Generate a string with an odd number of each character
- [Daily LeetCode]——1. The sum of two numbers
猜你喜欢
随机推荐
四元数、罗德里格斯公式、欧拉角、旋转矩阵推导和资料
Nacos source code analysis topic (1) - environment preparation
29. 删除链表中重复的节点
MySQL8.0.28安装教程
MySQL函数(经典收藏)
Chapter 10_Index Optimization and Query Optimization
【LeetCode】104. Maximum depth of binary tree
mysql使用on duplicate key update批量更新数据
MySQL六脉神剑,SQL通关大总结
Qt自定义控件和模板分享
第10章_索引优化与查询优化
VPS8702 VPSC(源特科技)电源管理(PMIC) 封装SOT23-6
svm.SVC应用实践1--乳腺癌检测
- daily a LeetCode 】 【 9. Palindrome
面试必备!TCP协议经典十五连问!
数仓:为什么说 ETL 的未来不是 ELT,而是 EL (T)
最大层内元素和
MySQL index optimization in practice
递归检查配置项是否更变并替换
Flask 报错:WARNING This is a development server. Do not use it in a production deployment









