必要になるたびに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)
}
}