Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Error handling 如何在gorm中检测连接故障?_Error Handling_Go_Go Gorm - Fatal编程技术网

Error handling 如何在gorm中检测连接故障?

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

我正在用go编写一个小而简单的web应用程序

由于数据库可能独立于web应用程序而发生故障,因此我希望能够识别与此情况相对应的错误,以便在不重新启动web应用程序的情况下重新连接到数据库

激励示例:

考虑以下代码:

var mrs MyRowStruct
db := myDB.Model(MyRowStruct{}).Where("column_name = ?", value).First(&mrs)
return &mrs, db.Error
  • 如果
    db.Error!=nil
    ,如何以编程方式确定错误是否源于数据库连接问题

  • 从我的阅读中,我了解到
    gorm.DB
    并不代表连接,所以如果数据库连接失败,我甚至需要担心重新连接或重新调用
    gorm.Open

  • Go中是否有处理数据库故障的常见模式


  • 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...
      }
    }
    

    非常感谢!你的片段完美地回答了我的问题。非常感谢!你的片段完美地回答了我的问题。