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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-12 22:20:02803ブラウズ

How to Share a MySQL Connection Handle Between Go HTTP Handlers?

Go HTTP ハンドラーでの MySQL 接続の管理

Go のデータベース/SQL パッケージはデータベース接続を処理し、接続プーリングを自動的に管理します。 sql.Open() を呼び出すと、接続プールを管理するハンドルが返されます。このハンドルは、必要に応じて新しい接続を確立し、データベース操作に常に利用可能な接続を確保します。

データベース接続ハンドルの共有

コード内で、 main() 関数内のタイプ *sql.DB のグローバル変数 db。この変数は接続プールのハンドルを表します。 HTTP ハンドラーと共有するには、db ハンドルをパラメーターとしてハンドラー関数に渡すことができます。

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

HomeHandler 内関数では、パラメータとして渡される DB ハンドルを使用してデータベース接続にアクセスできます。

import (
    "database/sql"
    "fmt"
)

func HomeHandler(w http.ResponseWriter, r *http.Request, db *sql.DB) {
    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 ハンドラー登録

main() 関数内、HTTP ハンドラーを登録するときに、db ハンドルを引数として渡すことができます:

import (
    "github.com/gorilla/mux"
)

func main() {
    fmt.Println("starting up")

    db, err := sql.Open("mysql", "root@unix(/tmp/mysql.sock)/mydb")
    if err != nil {
        log.Fatalf("Error on initializing database connection: %s", err.Error())
    }
    
    r := mux.NewRouter()
    r.HandleFunc("/", HomeHandler(db)) // Pass the db handle as an argument to the handler

    http.Handle("/", r)
    http.ListenAndServe(":8080", nil)
}

これらの手順に従うことで、Go の HTTP ゴルーチン間で MySQL 接続を効果的に共有できます。データベース/SQL パッケージの自動接続プーリングにより、最適なパフォーマンスとリソース管理が保証されます。

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

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