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() 함수 내에서 데이터베이스 연결을 참조하는 여러 옵션이 있습니다.
<code class="go">func addRow(db *sql.DB, row Room) error</code>
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!