HTTP ゴルーチン間で MySQL 接続を共有する方法?
Go では、database/sql パッケージにより、HTTP ゴルーチン間のデータベース接続の共有が簡素化されます。 。接続プールを作成すると、データベース接続の開始と終了が自動的に管理されます。
sql.Open(...) 関数は、単一の接続だけでなく、接続プール ハンドルを返します。データベース/SQL パッケージは、プールが完全に利用されているときに新しい接続のオープンを処理します。
提供されたコード サンプルでデータベース接続を共有するには、main() 関数で db 接続をインスタンス化し、それをグローバル変数に割り当てます。
var db *sql.DB // Global variable for sharing between main and HTTP handler
次に、main() 関数で sql.Open(...) を使用して接続プールを初期化します。 SetMaxIdleConns(...) は、プール内のアイドル接続の数を構成します。 Ping() 呼び出しにより、必要に応じて接続が確実に確立されます。
func main() { var err error db, err = sql.Open("mysql", "root@unix(/tmp/mysql.sock)/mydb") // This opens a connection pool if err != nil { log.Fatalf("Error on initializing database connection: %s", err.Error()) } db.SetMaxIdleConns(100) err = db.Ping() // This actually opens a connection if necessary if err != nil { log.Fatalf("Error on opening database connection: %s", err.Error()) } }
HomeHandler 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 ゴルーチン間で効率的に共有できます。
以上がGo の HTTP ゴルーチン間で MySQL 接続を共有するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。