반응형
Golang에서 mysql과 연동하기 위해 "database/sql"과 "github.com/go-sql-driver/mysql" 패키지를 import 해야한다.
"database/sql"은 golang의 데이터베이스 관련 인터페이스를 제공하고, DB연결, 쿼리 실행, 트랜잭션 등을 처리할 수 있다.
"github.com/go-sql-driver/mysql"은 mysql DB 드라이버를 구현한 패키지다.
사용 방법
터미널에서 다음의 명령어를 사용하여 패키지를 다운로드 한다. (이미 설치가 되어 있다면 생략)
go get github.com/go-sql-driver/mysql
예제 코드)
DB가 이미 생성되어 있다는 가정하에 진행
package main
import (
"database/sql"
"fmt"
"log" // logging을 위해 사용, 필수는 아니지만 사용 권장
_ "github.com/go-sql-driver/mysql" // 개발자가 드라이버 패키지를 직접 사용하지 않도록 _(언더바)를 alias를 준다.
)
func main() {
// MySQL 데이터베이스 연결 정보
db, err := sql.Open("mysql", "root:1234@tcp(localhost:3306)/schooldb") // DB 정보) id: root, pw: 1234, db name: schooldb
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 데이터베이스 연결 확인
err = db.Ping()
if err != nil {
log.Fatal(err)
}
fmt.Println("Connected to MySQL database!")
// 쿼리 실행
rows, err := db.Query("SELECT id, name FROM student") // 학생 테이블에서 id, name을 조회
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.Printf("ID: %d, Name: %s\n", id, name)
}
}
위의 예제는 복수개의 row를 반환할 경우의 쿼리 예제이다.
만약 하나의 row만을 반환할 경우 다음의 코드와 같다.
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// MySQL 데이터베이스 연결 정보
db, err := sql.Open("mysql", "root:1234@tcp(localhost:3306)/schooldb")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 데이터베이스 연결 확인
err = db.Ping()
if err != nil {
log.Fatal(err)
}
fmt.Println("Connected to MySQL database!")
// 쿼리 실행
var name string
row, err := db.QueryRow("SELECT id, name FROM student WHERE id = 1").Scan(&name) // id가 1인 학생을 조회
if err != nil {
log.Fatal(err)
}
defer rows.Close()
fmt.Println(name)
}
반응형
'Golang' 카테고리의 다른 글
Golang http package (0) | 2023.08.08 |
---|---|
Golang 난수 생성(math/rand) (0) | 2023.06.30 |
디스코드가 Go 대신 Rust로 전환하는 이유 (0) | 2023.06.14 |
Golang 웹 크롤링/크롤러 (0) | 2023.06.01 |
Golang 슬라이스 정렬(오름차순, 내림차순) (0) | 2023.04.10 |
댓글