string - 在 Go 中处理动态错误(特别是 database/sql 包)

标签 string error-handling go

在 go 中使用 database/sql 包执行 sql.Exec 之类的操作将返回动态生成的未引用错误,例如

"Error 1062: Duplicate entry '192' for key 'id'"

问题是它也可以返回错误,例如

"Error 1146: Table 'tbl' doesn't exist"

来自对 sql.Exec 的相同调用

在没有

的情况下,我如何分辨这两个错误之间的区别?
  1. 字符串比较,或者
  2. 错误代码的模式匹配

或者这些是该问题的惯用可行解决方案?

最佳答案

database/sql 包没有解决这个问题。它是特定于驱动程序的。例如,对于 mysql 你可以使用:

if mysqlError, ok := err.(*mysql.MySQLError); ok {
    if mysqlError.Number == 1146 {
        //handling
    }
}

另外,你也可以找到一些错误常量包,比如VividCortex的mysqlerr,并使用它:

if mysqlError, ok := err.(*mysql.MySQLError); ok {
    if mysqlError.Number == mysqlerr.ER_NO_SUCH_TABLE {
        //handling
    }
}

它并不比模式匹配好多少,但似乎更加地道。

关于string - 在 Go 中处理动态错误(特别是 database/sql 包),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27644009/

相关文章:

c - C中的字符串中存在子字符串

java - 我们如何更改标签中的行?

java - 正则表达式匹配空格后跟一个或多个字符

c# - 使用 C#,如何检测断开的链接或标记?

arrays - Go 中的不安全指针 : function call end kills array

time - 获取 time.Time 月份的最后一天

php - 图像大小调整不起作用(使用 base64)

error-handling - 通知选项卡上的Azure数据工厂捕获错误输出

jquery - 如何处理Jquery数据表中的Ajax 401(未经授权的访问错误)?

go - 将函数包装在函数类型中有什么意义?