在 go 中使用 database/sql
包执行 sql.Exec
之类的操作将返回动态生成的未引用错误,例如
"Error 1062: Duplicate entry '192' for key 'id'"
问题是它也可以返回错误,例如
"Error 1146: Table 'tbl' doesn't exist"
来自对 sql.Exec
的相同调用
在没有
的情况下,我如何分辨这两个错误之间的区别?- 字符串比较,或者
- 错误代码的模式匹配
或者这些是该问题的惯用可行解决方案?
最佳答案
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/