使用Ping查看Golang中的DB连接是否处于活动状态

dfi*_*dfi 5 go

是否可以安全地ping数据库以检查我的golang应用程序是否仍然连接或是否有比这更好的解决方案?我在某处读过我们不应该使用.ping()来确定连接丢失.

谢谢.

Mar*_*ark 5

可能更好地执行简单查询并检查结果.Ping()方法可以安全使用,但可以由数据库驱动程序实现.

Ping()


Kim*_*kka 5

我想说Ping()是执行此操作的方式,如果您需要仅在程序启动时才将运行查询的连接分开进行测试。

通常,我只是相信数据库/ sql会自动尝试重新连接,以防您对数据库执行查询而连接失败。因此,您可以使用Open来检查数据库连接args是否正确,并使用信任查询返回错误以防连接丢失。

人们说Ping()会导致竞争状况,但无法向我演示如何进行或在需要进行连接测试的情况下提供合适的替代方法。

这是Gorm(广泛使用的Golang ORM项目)的实现方式:

// Send a ping to make sure the database connection is alive.
    if d, ok := dbSQL.(*sql.DB); ok {
        if err = d.Ping(); err != nil {
            d.Close()
        }
    }
    return
Run Code Online (Sandbox Code Playgroud)

https://github.com/jinzhu/gorm