Golang은 다양한 데이터베이스를 다룰 수 있는데요. Oracle, MySQL, MSSQL Server, DB2 그리고 PostgreSQL 등에 대한 DB 드라이버 라이브러리를 제공합니다. 각 드라이버는 github를 통해 소스코드와 함께 제공되며 드라이버에 대한 라이브러리 소스코드는 go get {URL}처럼 Command Line을 통해 설치하여 사용할 수 있습니다.
이 글은 Local PC에 설치된 PostgreSQL에 연결하여, 이미 존재하는 postgres 데이터베이스의 test 테이블에 데이터를 추가(INSERT)하고 쿼리(SELECT)하는 코드를 설명합니다.
먼저 postgreSQL에 연결하는 코드는 아래와 같습니다.
package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
const (
DB_USER = "postgres"
DB_PASSWORD = "ILOVEU"
DB_NAME = "postgres"
)
func main() {
dbinfo := fmt.Sprintf("user=%s password=%s dbname=%s sslmode=disable",
DB_USER, DB_PASSWORD, DB_NAME)
db, err := sql.Open("postgres", dbinfo)
if err != nil {
panic(err)
}
defer db.Close()
// ... 계속
다음 코드는 연결된 DB에 데이터를 추가(INSERT)하는 코드입니다.
result, err := db.Exec("INSERT INTO test (name, age) VALUES('Jackass', 19)")
if err != nil {
panic(err)
}
cntAffected, err := result.RowsAffected()
if err != nil {
panic(err)
}
fmt.Println("Affected Rows:", cntAffected)
// ... 계속
위의 코드 중 11번은 INSERT 된 데이터의 개수를 나타내며, 여기서는 1개를 추가했으므로 1이 됩니다. 다음 코드는 저장된 데이터를 조회(SELECT)하는 코드입니다.
rows, err := db.Query("SELECT name, age FROM test")
if err != nil {
panic(err)
}
defer rows.Close()
var name string
var age int
for rows.Next() {
err := rows.Scan(&name, &age)
if err != nil {
panic(err)
}
fmt.Println(name, age)
}
}
실행 결과는 다음과 같습니다.
Affected Rows: 1 Dip2K 40 Dip2K 40 Jackass 19 Jackass 19 Jackass 19 Jackass 19 Jackass 19 Jackass 19 Jackass 19
