Error handling 如何在gorm中检测连接故障?
我正在用go编写一个小而简单的web应用程序 由于数据库可能独立于web应用程序而发生故障,因此我希望能够识别与此情况相对应的错误,以便在不重新启动web应用程序的情况下重新连接到数据库 激励示例: 考虑以下代码:Error handling 如何在gorm中检测连接故障?,error-handling,go,go-gorm,Error Handling,Go,Go Gorm,我正在用go编写一个小而简单的web应用程序 由于数据库可能独立于web应用程序而发生故障,因此我希望能够识别与此情况相对应的错误,以便在不重新启动web应用程序的情况下重新连接到数据库 激励示例: 考虑以下代码: var mrs MyRowStruct db := myDB.Model(MyRowStruct{}).Where("column_name = ?", value).First(&mrs) return &mrs, db.Error 如果db.Error!=nil
var mrs MyRowStruct
db := myDB.Model(MyRowStruct{}).Where("column_name = ?", value).First(&mrs)
return &mrs, db.Error
db.Error!=nil
,如何以编程方式确定错误是否源于数据库连接问题gorm.DB
并不代表连接,所以如果数据库连接失败,我甚至需要担心重新连接或重新调用gorm.Open
Gorm似乎吞下了数据库驱动程序错误,只发出它自己的错误类型分类(请参阅)。当前似乎未报告连接错误 考虑提交问题或请求以直接暴露数据库驱动程序错误 [原件] 根据中的建议,尝试检查运行时类型的
db.Error
假设它是数据库驱动程序返回的错误类型,则可能会得到指示连接错误的特定代码。例如,如果您通过pq库使用PostgreSQL,则可以尝试以下方法:
import "github.com/lib/pq"
// ...
if db.Error != nil {
pqerr, ok := err.(*pq.Error)
if ok && pqerr.Code[0:2] == "08" {
// PostgreSQL "Connection Exceptions" are class "08"
// http://www.postgresql.org/docs/9.4/static/errcodes-appendix.html#ERRCODES-TABLE
// Do something for connection errors...
} else {
// Do something else with non-pg error or non-connection error...
}
}
Gorm似乎吞下了数据库驱动程序错误,只发出它自己的错误类型分类(请参阅)。当前似乎未报告连接错误 考虑提交问题或请求以直接暴露数据库驱动程序错误 [原件] 根据中的建议,尝试检查运行时类型的
db.Error
假设它是数据库驱动程序返回的错误类型,则可能会得到指示连接错误的特定代码。例如,如果您通过pq库使用PostgreSQL,则可以尝试以下方法:
import "github.com/lib/pq"
// ...
if db.Error != nil {
pqerr, ok := err.(*pq.Error)
if ok && pqerr.Code[0:2] == "08" {
// PostgreSQL "Connection Exceptions" are class "08"
// http://www.postgresql.org/docs/9.4/static/errcodes-appendix.html#ERRCODES-TABLE
// Do something for connection errors...
} else {
// Do something else with non-pg error or non-connection error...
}
}
非常感谢!你的片段完美地回答了我的问题。非常感谢!你的片段完美地回答了我的问题。