gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:24:43 26 4
gpt4 key购买 nike

在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com