1

この問題が発生しています

 db, err := sql.Open("postgres", "user=xxx dbname=xxx connect_timeout=5 sslmode=disable")
 if err != nil {
    log.Fatal(err)
 }

ローカルホストにpostgresがインストールされていないため、sql.Openはエラーを返すはずですが、実際には、クエリを準備しようとして最終的に接続拒否エラーが発生するまで返されません

stmt, err := c.DB.Prepare("SELECT id FROM services WHERE name = $1")
if err != nil {
    log.Fatal(err)
}

これは予想される動作ですか?または私は何かが欠けています...

4

1 に答える 1

3

thisによると、はい、これは予想される動作です。Open() は、データベースへの接続を直接開きません。代わりに、データベースが実際に初めて使用されるときに最初の接続が開かれます。

Open may just validate its arguments without creating a connection 
to the database. 
To verify that the data source name is valid, call Ping.

Ping()を使用して、接続が有効かどうかを確認します。

于 2016-11-15T10:29:09.980 に答える