>백엔드 개발 >Golang >Go의 함수에서 데이터베이스 연결에 액세스하는 방법은 무엇입니까?

Go의 함수에서 데이터베이스 연결에 액세스하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-29 12:01:29720검색

How to Access a Database Connection from a Function in Go?

Go의 함수 내에서 개방형 데이터베이스 연결 참조

Go에서 데이터베이스 작업을 할 때 데이터베이스에 대한 연결을 설정하는 것이 일반적입니다. main 함수에서 이 연결을 애플리케이션 전체에 활용합니다. 그러나 함수 내에서 데이터베이스 작업을 캡슐화하려는 경우에는 어떻게 되나요?

다음 시나리오를 고려해보세요. 기본 함수에서 데이터베이스 연결을 엽니다.

<code class="go">func main() {
    db, err := sql.Open("sqlite3", "./house.db")
    checkErr(err)

    ...
}</code>

이제 전달된 구조체를 기반으로 데이터베이스에 행을 추가하는 함수를 만드는 데 관심이 있습니다.

<code class="go">func addRow(row Room) error {
    stmt, err := db.Prepare("INSERT INTO Rooms (Name, Size, WindowCount, WallDecorationType, Floor) VALUES(?, ?, ?, ?, ?)")
    _, err = stmt.Exec(row.Name , row.Size , row.WindowCount , row.WallDecorationType , row.Floor)
    return err
}</code>

그러나 여기에 문제가 있습니다. addRow() 함수는 기본 함수에 정의된 db 변수에 대한 지식이 없습니다.

데이터베이스 연결 참조 처리 방법

에 따라 애플리케이션의 특성에 따라 addRow() 함수 내에서 데이터베이스 연결을 참조하는 여러 옵션이 있습니다.

  • 전역 변수: db를 전역 변수로 선언합니다. 이는 addRow() 함수를 포함하여 프로그램의 어느 곳에서나 액세스할 수 있음을 의미합니다. 전역 변수 사용은 자제해야 합니다.
  • 함수 매개변수: db 연결을 매개변수로 addRow() 함수에 전달합니다. 이를 통해 연결을 더욱 명시적으로 제어할 수 있으며 필요한 경우 다른 데이터베이스 연결을 사용할 수 있습니다.
<code class="go">func addRow(db *sql.DB, row Room) error</code>
  • 방법: 데이터베이스 연결을 만들고 addRow()를 해당 구조체의 메서드로 만듭니다. 이 접근 방식은 구조체 내의 데이터베이스 연결을 캡슐화합니다.
<code class="go">type dbConn struct {
    db *sql.DB
}

func (conn dbConn) addRow(row Room) error</code>

사용 예

전역 변수 접근 방식의 사용법을 보여드리겠습니다.

<code class="go">var db *sql.DB

func main() {
    db, err := sql.Open("sqlite3", "./house.db")
    checkErr(err)

    // create room Room{}
    err = addRow(room)
    checkErr(err)
}</code>

db를 전역 변수로 선언하면 프로그램 어디에서나 addRow() 함수에 액세스할 수 있습니다.

선택하는 접근 방식은 특정 요구 사항에 맞게 조정되어야 한다는 점을 명심하세요. 애플리케이션, 아키텍처 및 성능 고려 사항

위 내용은 Go의 함수에서 데이터베이스 연결에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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