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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-10 09:56:02552ブラウズ

How do I share a MySQL connection across multiple HTTP goroutines in Go?

Go HTTP ゴルーチンでの MySQL 接続の共有

Go で HTTP ゴルーチンを使用する場合、データベース接続を共有してパフォーマンスを最適化することが不可欠です。この記事では、複数の HTTP ハンドラー間で MySQL 接続を確立して共有する方法を説明します。

データベース接続管理

Go では、データベース/SQL パッケージが接続プーリングを自動的に処理します。 sql.Open(...) を呼び出すと、単一の接続ではなく接続プールが作成されます。これは、すべての接続がすでに使用されている場合、データベース/SQL パッケージがプールから接続を自動的に取得することを意味します。

コードの実装

HTTP ゴルーチンで MySQL 接続を共有するには、次の手順に従います。手順:

  1. データベース接続の初期化:

    • sql.Open("mysql", "< connection_string>").

    例:

    db, err := sql.Open("mysql", "root:@/mydb?charset=utf8")
    if err != nil {
        log.Fatalf("Error opening database: %v", err)
    }
  2. 接続プーリングの構成:

    • db.SetMaxIdleConns(100) を使用してアイドル接続の最大数を調整します。
  3. 接続ハンドルを共有します:

    • db 変数をグローバル変数として宣言し、メインハンドラーと HTTP ハンドラー間で共有します。

    例:

    var db *sql.DB
  4. データベース接続の確認:

    • main() で db.Ping() を呼び出して、データベースへの初期接続を確立します。

    例:

    err = db.Ping()
    if err != nil {
        log.Fatalf("Error opening database connection: %s", err.Error())
    }
  5. HTTP ハンドラーで接続を使用する:

    • 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 ゴルーチン間で MySQL 接続を効率的に共有します。

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

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