Go sql.DB.Ping()在数据库关闭时不返回错误

Go sql.DB.Ping()在数据库关闭时不返回错误,go,Go,在成功启动Go程序以测试sql.DB.Ping()的行为后,我故意停止了数据库 正在init()中调用sql.Open 令人惊讶的是,当我的程序在调用sql.DB.Query()之前调用sql.DB.Ping()时,它并没有返回错误 我为什么要这样做? 只是尝试编写健壮的代码。仅在启动时检查DB连接的完整性对于长期使用的生产web应用程序来说可能不够。Wjat drover您使用了什么?因为sql.DB.Query()会在连接关闭时返回错误,ping数据库是多余的,并且会引入竞争条件(句柄可能在

在成功启动Go程序以测试sql.DB.Ping()的行为后,我故意停止了数据库

正在init()中调用sql.Open

令人惊讶的是,当我的程序在调用sql.DB.Query()之前调用sql.DB.Ping()时,它并没有返回错误

我为什么要这样做?
只是尝试编写健壮的代码。仅在启动时检查DB连接的完整性对于长期使用的生产web应用程序来说可能不够。

Wjat drover您使用了什么?因为
sql.DB.Query()
会在连接关闭时返回错误,ping数据库是多余的,并且会引入竞争条件(句柄可能在ping和查询之间关闭)。请改为处理查询错误。如果错误是因为连接已关闭,请重新连接并重试。@Schwern
ping()有有效的用途
,例如不打算执行任何查询的运行状况检查,只是检查以验证数据库是否可访问。@Lee您使用的是什么数据库和驱动程序?我遇到了一个问题,当数据库*设置不正确时,Ping()可以找到此问题的可能答案根本无法返回,并无限期挂起。这显然是错误的(Go 1.11)