>  기사  >  백엔드 개발  >  Go HTTP 핸들러 간에 MySQL 연결 핸들을 공유하는 방법은 무엇입니까?

Go HTTP 핸들러 간에 MySQL 연결 핸들을 공유하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-12 22:20:02844검색

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.