err 错误使用场景
错误 使用 场景 ERR
2023-06-13 09:15:25 时间
err 错误使用场景
在同一个函数中会出现不止一个err乃至很多的err类型,需要注意使用最近的err类型,这个最近体现在两个方面:
- 最好err不重新定义,这样每次使用err,之前的err会被重新覆盖,也会强制每个err立刻使用。
- 在err出现在不同的作用域的时候,需要使用最近的作用域中的err。
错误的返回 Err
case 1
代码中的不应该使用整个func作用域内的err当做返回值,而应该使用最近作用域内的db.Error当做返回值.
// 代码中的不应该使用整个func作用域内的err当做返回值,而应该使用最近作用域内的db.Error当做返回值
func NewTransOrderDaoInstance() error {
var err error
db = db.Create(order)
if db.Error != nil {
logs.CtxError(ctx, "Create transOrder error, %v", err)
return err
}
return nil
}
case 2
// 首先代码中不应该在同一个作用域内命令两个err变量err与err2
// 在返回时也应该使用更近的err2,而不是更远的err作为返回
func NewTransOrderDaoInstance() error {
var err error
err2 := db.Create(order).Error
return nil,err
}
案例2: 覆盖 err 导致 事务不回滚
var err error
var isDuplicated bool
tx := model.BeginForShardingDBWithDbName(ctx, DBNAMe)
if tx == nil {
logs.CtxError(ctx, "Task BeginTrans failed")
return false, fmt.Errorf("Task BeginTrans failed")
}
defer func() {
if r := recover(); r != nil {
logs.Error("task panic: %+v", r)
err = fmt.Errorf("Task Trans panic")
err = EndTransaction(ctx, tx, err)
panic(r)
} else {
err = EndTransaction(ctx, tx, err)
}
}()
// 对 err 进行了重新定义里, 不再是 var err error 中的err ,如果这里 err 是异常,事务将不会进行回滚
_, isDuplicated, err := model.NewTpAccountOrderDaoInstance().CreateTpAccountOrder(ctx, tx, tpAccountOrder)
if err != nil {
return isDuplicated, err
}
如何解决
- 提交代码的时候,可以相互cr,看一下是不是存在
- 1、返回 err是否返回正确,或者 err 赋值错误;
- 2、关注是否重新定义了 err
相关文章
- java.lang.abstractMethodError的错误解决「建议收藏」
- linux出现e325错误,centos系统使用VI访问文件时候出现E325: ATTENTION类的错误提示处理方法…[通俗易懂]
- Java中String转换为JSONArray发生错误[通俗易懂]
- 2022-08-31:以下go语言代码输出什么?A:江苏;B:v[“province“]取值错误;C:m.Store存储错误;D:不知道。 package ma
- rpc服务器不可用 dcom 无法使用任何配置的协议与计算机,如何修复Windows上的“RPC服务器不可用”错误?…
- 使用GROUP BY 发生错误 SELECT list is not in GROUP BY clause .......... 解决
- ValueError: too many values to unpack (expected 4)错误,小波变换函数 wavedec2 使用时提示的「建议收藏」
- 解决使用Nginx错误 Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING问题
- 数据科学家在使用Python时常犯的9个错误
- 故障分析 | MySQL 使用 load data 导入数据错误的一个场景
- 【已解决】在使用RocketMQ消费消息的时候,提示不支持SQL92的错误:CODE: 1 DESC: The broker does not support consumer to filter
- Go错误集锦 | 正确理解nil通道及其使用场景
- 【错误记录】Git 使用报错 ( no changes added to commit (use “git add“ and/or “git commit -a“) )
- 【错误记录】Kotlin 代码编译时报错 ( Variable ‘name‘ must be initialized | 初始化块定义在所有属性之后 )
- 使用 WordPress 国内镜像,解决 429 Too Many Requests 错误
- python自定义错误类型
- SQLServer 错误 10060 在建立与服务器的连接时出错。 在连接到 SQL Server 时,在默认的设置下 SQL Server 不允许远程连接可能会导致此失败。 (提供程序:TCP 提供程序,错误:0 – 由于被连接方在一段时间后未正确响应,或者连接的主机无法响应,连接尝试失败。)(Microsoft SQL Server,错误:10060) 故障 处理 修复 支持远程
- SQLServer 错误 15404 无法获取有关 Windows NT 组/用户“user”的信息,错误代码 code。 故障 处理 修复 支持远程
- SQLServer 错误 17884 在最后 %d 秒内,没有一个工作线程拾取了分配给节点 %d 上的进程的新查询。 查询被阻塞或长时间运行可能导致出现此情况,并且可能会延长客户端响应时间。 请使用 “最大工作线程数(max worker threads)” 配置选项增加允许的线程数,或者优化当前正运行的查询。 SQL 进程使用率: %d%%。 系统空闲率:%d%%。 故障 处理 修复 支持远程
- 解决Linux编译错误的有效方法(linux编译错误)
- Win10累积更新KB4601319发布:修复ESENT 642错误
- 错误解决MySQL 1045登陆错误(登陆mysql1045)
- MySQL编码错误:解决不可忽视的痛点(mysql编码错误)
- 我的第一个系统管理员错误
- 解决mysql错误1129问题(mysql1129)
- 解决MySQL错误1053:独家技巧让你快速修复数据库错误!(mysql1053)
- 原来可以正常使用,现在一自检就提示:未指定的错误
- mysqlSKIP-NAME-RESOLVE错误的使用时机造成用户权限
- 使用jquery的ajax调用总是错误亲测的解决方法