Go 언어로 데이터베이스 작업 기능을 구현하는 방법
Go 언어는 효율적이고 간결한 프로그래밍 언어로서 서버 백엔드 및 데이터베이스 작업 개발에 매우 적합합니다. 실제 애플리케이션 개발에 있어 데이터베이스 운용은 필수적인 연결 고리이다. 오늘은 Go 언어로 데이터베이스 연산 기능을 구현하는 방법과 몇 가지 일반적인 연산 예제를 소개하겠습니다.
1. 데이터베이스 연결
Go 언어에서는 타사 라이브러리를 사용하여 다양한 유형의 데이터베이스에 연결할 수 있습니다. 그중 가장 일반적으로 사용되는 것은 표준 라이브러리의 "database/sql" 패키지와 "go-sqlite3", "mysql", "postgres"와 같은 다양한 데이터베이스 드라이버입니다.
먼저 필요한 패키지를 가져와야 합니다.
import ( "database/sql" _ "github.com/go-sql-driver/mysql" // MySQL驱动 )
그런 다음 "sql.Open" 함수를 사용하여 데이터베이스에 연결할 수 있습니다.
db, err := sql.Open("mysql", "user:password@tcp(localhost:8889)/mydb") if err != nil { log.Fatal(err) } defer db.Close()
위 코드에서는 MySQL 드라이버를 사용하고 데이터베이스를 지정합니다. 연결 주소 및 자격 증명. 연결이 성공하면 "db" 객체를 통해 다양한 데이터베이스 작업을 수행할 수 있습니다.
2. SQL 문 실행
일반적으로 데이터베이스 작업에는 쿼리, 삽입, 업데이트, 삭제 등의 기능이 주로 포함됩니다. 다음은 일반적인 데이터베이스 작업의 몇 가지 예입니다.
rows, err := db.Query("SELECT * FROM users") if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var id int var name string err := rows.Scan(&id, &name) if err != nil { log.Fatal(err) } fmt.Println(id, name) } err = rows.Err() if err != nil { log.Fatal(err) }
위 코드에서는 "db.Query" 함수를 통해 SELECT 문을 실행하고, "rows.Next"와 "rows.Scan"을 통해 쿼리 결과를 얻습니다. 쿼리 결과를 사용한 후 리소스가 해제되도록 하려면 "deferrows.Close()"를 사용해야 한다는 점에 유의해야 합니다.
stmt, err := db.Prepare("INSERT INTO users(name) VALUES(?)") if err != nil { log.Fatal(err) } defer stmt.Close() res, err := stmt.Exec("John") if err != nil { log.Fatal(err) } id, err := res.LastInsertId() if err != nil { log.Fatal(err) } fmt.Println("Inserted record ID:", id)
위 코드에서는 "db.Prepare" 함수를 사용하여 INSERT 문을 준비하고 "stmt.Exec"을 사용하여 삽입 작업을 수행합니다. 그러면 "res.LastInsertId"를 통해 삽입된 레코드에 해당하는 ID를 얻을 수 있습니다.
stmt, err := db.Prepare("UPDATE users SET name=? WHERE id=?") if err != nil { log.Fatal(err) } defer stmt.Close() res, err := stmt.Exec("John Smith", 1) if err != nil { log.Fatal(err) } rowsAffected, err := res.RowsAffected() if err != nil { log.Fatal(err) } fmt.Println("Rows affected:", rowsAffected)
위 코드에서는 "db.Prepare" 함수를 통해 UPDATE 문을 준비하고 "stmt.Exec"을 사용하여 업데이트 작업을 수행했습니다. 그런 다음 "res.RowsAffected"를 통해 영향을 받은 행 수를 얻을 수 있습니다.
stmt, err := db.Prepare("DELETE FROM users WHERE id=?") if err != nil { log.Fatal(err) } defer stmt.Close() res, err := stmt.Exec(1) if err != nil { log.Fatal(err) } rowsAffected, err := res.RowsAffected() if err != nil { log.Fatal(err) } fmt.Println("Rows affected:", rowsAffected)
위 코드에서는 "db.Prepare" 함수를 통해 DELETE 문을 준비하고 "stmt.Exec"을 사용하여 삭제 작업을 수행했습니다. 마찬가지로 "res.RowsAffected"를 통해 영향을 받은 행 수를 얻을 수 있습니다.
3. 트랜잭션 처리
실제 애플리케이션 개발에서 트랜잭션 처리는 매우 중요한 기능입니다. Go 언어에서는 "db.Begin"을 사용하여 트랜잭션을 시작하고 "tx.Commit"을 사용하여 트랜잭션을 커밋할 수 있습니다. 트랜잭션 처리 중 오류가 발생하면 "tx.Rollback"을 사용하여 트랜잭션을 롤백할 수 있습니다.
tx, err := db.Begin() if err != nil { log.Fatal(err) } stmt, err := tx.Prepare("INSERT INTO users(name) VALUES(?)") if err != nil { tx.Rollback() log.Fatal(err) } defer stmt.Close() _, err = stmt.Exec("John") if err != nil { tx.Rollback() log.Fatal(err) } err = tx.Commit() if err != nil { log.Fatal(err) }
위 코드에서는 "db.Begin"을 사용하여 트랜잭션을 시작하고 트랜잭션에서 삽입 작업을 수행합니다. 오류가 발생하면 "tx.Rollback"을 사용하여 트랜잭션을 롤백하고, 그렇지 않으면 "tx.Commit"을 사용하여 트랜잭션을 커밋합니다.
요약:
이 글의 소개를 통해 우리는 Go 언어로 데이터베이스 작업 기능을 구현하는 방법을 배웠고 몇 가지 일반적인 데이터베이스 작업 예제를 보여주었습니다. "database/sql" 패키지와 적절한 데이터베이스 드라이버를 사용하여 다양한 유형의 데이터베이스를 쉽게 연결할 수 있다는 점은 언급할 가치가 있습니다. 이 기사가 Go 언어로 데이터베이스 작업을 수행하는 데 도움이 되기를 바랍니다!
위 내용은 Go 언어로 데이터베이스 작업 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!