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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-18 06:14:02390ブラウズ

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

Go の HTTP ゴルーチン間で MySQL 接続を共有する

Go では、データベース接続の同時管理は少しわかりにくい場合があります。この記事では、複数の HTTP ゴルーチン間で MySQL 接続を効果的に共有する方法について説明します。

概要

Go でデータベース/SQL パッケージを使用する場合、sql.Open() を呼び出しても即時接続が確立されません。データベース接続。代わりに、パッケージによって管理される接続のコレクションである接続プールが作成されます。パッケージは自動的にプールを処理し、必要に応じて新しい接続を開きます。

接続の共有

main() と HTTP ハンドラーの間で接続を共有するには、グローバル db 変数を宣言します。

var db *sql.DB

main() で、接続プールを初期化します:

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

db.SetMaxIdleConns(100)

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

HTTP ハンドラーは共有データベース接続にアクセスできるようになります:

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)
    }
}

結論

これらの手順に従うことで、Go の複数の HTTP ゴルーチン間で MySQL 接続を効果的に共有し、不必要なオーバーヘッドなしで効率的なデータベース アクセスを確保できます。

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

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