ホームページ >バックエンド開発 >Golang >Go の HTTP ゴルーチン間で MySQL 接続を共有するにはどうすればよいですか?

Go の HTTP ゴルーチン間で MySQL 接続を共有するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-27 03:40:14287ブラウズ

How to Share a MySQL Connection between HTTP Goroutines in Go?

HTTP ゴルーチン間で MySQL 接続を共有する方法?

Go では、database/sql パッケージにより、HTTP ゴルーチン間のデータベース接続の共有が簡素化されます。 。接続プールを作成すると、データベース接続の開始と終了が自動的に管理されます。

sql.Open(...) 関数は、単一の接続だけでなく、接続プール ハンドルを返します。データベース/SQL パッケージは、プールが完全に利用されているときに新しい接続のオープンを処理します。

提供されたコード サンプルでデータベース接続を共有するには、main() 関数で db 接続をインスタンス化し、それをグローバル変数に割り当てます。

var db *sql.DB // Global variable for sharing between main and HTTP handler

次に、main() 関数で sql.Open(...) を使用して接続プールを初期化します。 SetMaxIdleConns(...) は、プール内のアイドル接続の数を構成します。 Ping() 呼び出しにより、必要に応じて接続が確実に確立されます。

func main() {
    var err error
    db, err = sql.Open("mysql", "root@unix(/tmp/mysql.sock)/mydb") // This opens a connection pool
    if err != nil {
        log.Fatalf("Error on initializing database connection: %s", err.Error())
    }

    db.SetMaxIdleConns(100)

    err = db.Ping() // This actually opens a connection if necessary
    if err != nil {
        log.Fatalf("Error on opening database connection: %s", err.Error())
    }
}

HomeHandler HTTP ハンドラーで、グローバル db 変数を使用してクエリを実行します。

func HomeHandler(w http.ResponseWriter, r *http.Request) {
    var msg string
    err := db.QueryRow("SELECT msg FROM hello WHERE page=?", "home").Scan(&msg)
    if err != nil {
        fmt.Fprintf(w, "Database Error!")
    } else {
        fmt.Fprintf(w, msg)
    }
}

次のようにしますこのアプローチにより、手動で接続を開いたり閉じたりする必要がなく、データベース接続を HTTP ゴルーチン間で効率的に共有できます。

以上がGo の HTTP ゴルーチン間で MySQL 接続を共有するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。