Go에서 sqlx 사용

5623 단어 Go

Go 데이터베이스 라이브러리 qlx


Go에서 데이터베이스 연결에 사용되는 표준 패키지 데이터베이스/sql에서 확장 기능을 제공하는 라이브러리입니다.
DB에서 끌어낸 데이터를 구조체, 지도, 절편에 적용한다.

뭐가 좋을까?


일반적인 상황에서 데이터베이스에서 끌어낸 데이터는 반드시 열에 따라 하나씩 스캔(유형 변환)해야 하지만 마음대로 진행할 수 있기 때문에 코드 기술량을 줄일 수 있다.열수가 많은 기록을 모두 끌어올 때 매우 편리하다.
그 외에 다른 용도가 있을지도 모르지만, 이제 알겠다.

사용 방법


안 쓰면 알 수 없을 것 같아서 구체적인 예로 살펴보겠습니다.
이번에는 Mysql에서 미리 준비한 id,name,age열을 포함하는 간단한 데이터베이스에 연결하려고 합니다.사전에 두 개의 기록을 삽입하였다.

우선 goget 라이브러리입니다.
https://github.com/jmoiron/sqlx
go get github.com/jmoiron/sqlx
다음은 끌어온 데이터를 구조체에 적용하는 가장 간단한 코드 기술예이다.
package main

import (
    "fmt"
    "log"

    _ "github.com/go-sql-driver/mysql"
    "github.com/jmoiron/sqlx"
)

//引っ張ってきたデータを当てはめる構造体を用意。
//その際、バッククオート(`)で、どのカラムと紐づけるのかを明示する。
type User struct {
    ID   int    `db:"id"`
    Name string `db:"name"`
    Age  int    `db:"age"`
}

type Userlist []User

func main() {

    //Userデータ一件一件を格納する配列Userlistを、Userlist型で用意
    var userlist Userlist

    //Mysqlに接続。sql.Openの代わりにsqlx.Openを使う。
    //ドライバ名、データソース名を引数に渡す
    db, err := sqlx.Open("mysql", "root@/gosample")
    if err != nil {
        log.Fatal(err)
    }

    //SELECTを実行。db.Queryの代わりにdb.Queryxを使う。
    rows, err := db.Queryx("SELECT * FROM users")
    if err != nil {
        log.Fatal(err)
    }

    var user User
    for rows.Next() {

        //rows.Scanの代わりにrows.StructScanを使う
        err := rows.StructScan(&user)
        if err != nil {
            log.Fatal(err)
        }
        userlist = append(userlist, user)
    }

    fmt.Println(userlist)
    //[{1 yamada 25} {2 suzuki 28}]

}

일반적인 ql 패키지라면rows.이어서 "&user.ID, $user.Name..."등등, 열의 매개 변수만 써야 하지만 sqlx를 사용하면 일치하는 구조체의 구성을 볼 수 있기 때문에 여기서'&user'만 쓰면 됩니다.
이번에는 3개의 열밖에 없기 때문에 모두 쓰는 것도 어렵지 않지만 열수가 많은 기록은 매우 편리하다.

참고 자료


공식.
https://github.com/jmoiron/sqlx
http://jmoiron.github.io/sqlx/

좋은 웹페이지 즐겨찾기