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 중국어 웹사이트의 기타 관련 기사를 참조하세요!