必要になるたびにdb接続を開くことはリソースの浪費であり、時間がかかります。
代わりに、sql.DB
を作成する必要があります 1回は、アプリケーションの起動時(または最初の要求時)に、必要な場所に渡すか(関数パラメーターとして、または何らかのコンテキストを介して)、または単にグローバル変数にして、誰もがアクセスできるようにします。複数のゴルーチンから電話しても安全です。
sql.Open()
のドキュメントからの引用 :
返されたDBは、複数のゴルーチンによる同時使用に対して安全であり、アイドル状態の接続の独自のプールを維持します。したがって、Open関数は1回だけ呼び出す必要があります。 DBを閉じる必要はめったにありません。
パッケージinit()
を使用できます 初期化する関数:
var db *sql.DB
func init() {
var err error
db, err = sql.Open("yourdriver", "yourDs")
if err != nil {
log.Fatal("Invalid DB config:", err)
}
}
ここで注意すべきことの1つは、sql.Open()
DBへの実際の接続を作成しない場合があり、引数を検証するだけの場合があります。実際にデータベースに接続できるかどうかをテストするには、DB.Ping()
を使用します 例:
func init() {
var err error
db, err = sql.Open("yourdriver", "yourDs")
if err != nil {
log.Fatal("Invalid DB config:", err)
}
if err = db.Ping(); err != nil {
log.Fatal("DB unreachable:", err)
}
}