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

使用Ping查找Golang中的DB连接是否处于活动状态,go,Go,只需ping数据库以检查我的golang应用程序是否仍处于连接状态是否安全,或者是否有比此更好的解决方案?我在某个地方读到,我们不应该使用.ping()来确定连接丢失 谢谢。最好执行一个简单的查询并检查结果。Ping()方法使用起来是安全的,但可由数据库驱动程序实现 请参见如果您需要单独测试运行查询的连接(可能仅在程序启动时),我会说Ping()是一种方法 通常我只相信这样一个事实,即数据库/sql将自动尝试重新连接,以防对DB执行查询而连接失败。所以您可以使用Open检查DB connecti

只需ping数据库以检查我的golang应用程序是否仍处于连接状态是否安全,或者是否有比此更好的解决方案?我在某个地方读到,我们不应该使用.ping()来确定连接丢失


谢谢。

最好执行一个简单的查询并检查结果。Ping()方法使用起来是安全的,但可由数据库驱动程序实现

请参见

如果您需要单独测试运行查询的连接(可能仅在程序启动时),我会说Ping()是一种方法

通常我只相信这样一个事实,即数据库/sql将自动尝试重新连接,以防对DB执行查询而连接失败。所以您可以使用Open检查DB connection args是否正确,并使用trust query在连接丢失时返回错误

人们说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

Ping也会在每次我的情况下创建一个新连接:(Ping和其他到达数据库的调用一样,可能会在不存在可用连接的情况下创建一个新连接。这取决于程序的实现和驱动程序。Go会维护一个连接池,并在可能的情况下重用连接。请参阅。