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