sql >> データベース >  >> RDS >> PostgreSQL

GoアプリでDb接続の開閉を処理するにはどうすればよいですか?

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


    1. PostgreSQLで文字列を日付に変換する方法

    2. java.sql.SQLException:不正な文字列値:'\ xF0 \ x9F \ x91 \ xBD \ xF0 \ x9F ...'

    3. MySQLがいくつかの外部キーを削除する

    4. oracle plsql varchar2変数にサイズが必要なのに、パラメータには必要ないのはなぜですか。