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 サイトの他の関連記事を参照してください。