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

Go HTTP ハンドラー間で MySQL 接続を共有するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-12 21:42:02990ブラウズ

How to Share a MySQL Connection Across Go HTTP Handlers?

Go HTTP ハンドラーでの MySQL 接続の共有

Go では、データベース接続の管理は、database/sql パッケージを使用してシームレスに行われます。このガイドでは、MySQL 接続を確立し、それを HTTP ハンドラー間で共有する方法について詳しく説明します。

接続の確立

main() 関数は、データベース接続の初期化を担当します。 。ここでは、sql.Open() を呼び出します。これにより、単一の接続ではなく、接続プール ハンドルが返されます。このハンドルは、必要に応じて接続を提供するためのロジックをカプセル化し、リソースの効率的な利用を確保します。

db, err := sql.Open("mysql", "root:@/mydb?charset=utf8")

構成と Ping

接続プールが確立されたら、アプリケーションのニーズを満たすように構成できます。 。たとえば、プール内のアイドル接続の最大数を設定できます:

db.SetMaxIdleConns(100)

データベースの可用性を確認するには、続行する前に ping を実行する必要があります:

err = db.Ping()

接続の共有

接続を共有する鍵は、db 変数を main() と HTTP ハンドラーの両方にアクセスできるグローバル変数にすることにあります。これにより、すべてのゴルーチンが同じ接続プールを利用できるようになります。

var db *sql.DB // global variable to share between main and HTTP handlers

HTTP ハンドラーでの接続の使用

HTTP ハンドラー内では、共有接続を使用してデータベースと対話できます。たとえば、「hello」テーブルからデータを取得するには:

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 接続を共有するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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