>백엔드 개발 >Golang >Go의 여러 HTTP 고루틴에서 MySQL 연결을 어떻게 공유하나요?

Go의 여러 HTTP 고루틴에서 MySQL 연결을 어떻게 공유하나요?

Linda Hamilton
Linda Hamilton원래의
2024-11-10 09:56:02580검색

How do I share a MySQL connection across multiple HTTP goroutines in Go?

Go HTTP 고루틴에서 MySQL 연결 공유

Go에서 HTTP 고루틴으로 작업할 때 데이터베이스 연결을 공유하여 성능을 최적화하는 것이 중요합니다. 이 문서에서는 여러 HTTP 처리기 간에 MySQL 연결을 설정하고 공유하는 방법을 보여줍니다.

데이터베이스 연결 관리

Go에서는 데이터베이스/sql 패키지가 연결 풀링을 자동으로 처리합니다. sql.Open(...)을 호출하면 단일 연결이 아닌 연결 풀이 생성됩니다. 이는 모든 연결이 이미 사용 중인 경우 데이터베이스/sql 패키지가 자동으로 풀에서 연결을 얻음을 의미합니다.

코드 구현

HTTP 고루틴에서 MySQL 연결을 공유하려면 다음을 따르세요. 단계:

  1. 데이터베이스 초기화 연결:

    • sql.Open("mysql", "").

    예:

    db, err := sql.Open("mysql", "root:@/mydb?charset=utf8")
    if err != nil {
        log.Fatalf("Error opening database: %v", err)
    }
  2. 연결 풀링 구성:

    • 최대 조정 db.SetMaxIdleConns(100)를 사용하는 유휴 연결 수.
  3. 연결 핸들 공유:

    • db 선언 메인과 HTTP 사이에서 공유하기 위한 전역 변수로서의 변수

    예:

    var db *sql.DB
  4. 데이터베이스 연결 확인:

    • main()에서 db.Ping()을 호출하여 초기 설정 데이터베이스에 연결합니다.

    예:

    err = db.Ping()
    if err != nil {
        log.Fatalf("Error opening database connection: %s", err.Error())
    }
  5. HTTP 처리기에서 연결 사용:

    • 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)
        }
    }

이 단계를 따르면 여러 데이터베이스에서 MySQL 연결을 효율적으로 공유할 수 있습니다. 성능 저하 없는 HTTP 고루틴.

위 내용은 Go의 여러 HTTP 고루틴에서 MySQL 연결을 어떻게 공유하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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