sqlx:構造体スキャンと名前付きクエリ
sqlxによるGet、Select、NamedExec
「sqlx:構造体スキャンと名前付きクエリ」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
sqlxとは
github.com/jmoiron/sqlxは、構造体へのスキャン、名前付きクエリ、クエリ内バインドの機能をdatabase/sqlに追加します。database/sqlとAPI互換です。
sqlx.Open
sqlの代わりにsqlxを使ってデータベース接続を開きます:
db, err := sqlx.Open("postgres", dsn)
if err != nil { log.Fatal(err) }GetとSelect
db.Getは1行を構造体にスキャンし、db.Selectは複数の行をスライスにスキャンします:
var user User
db.GetContext(ctx, &user, "SELECT * FROM users WHERE id=$1", id)
var users []User
db.SelectContext(ctx, &users, "SELECT * FROM users WHERE active=$1", true)構造体タグ
sqlxはdbタグを使って、カラムを構造体のフィールドにマッピングします:
type User struct {
ID int `db:"id"`
Name string `db:"name"`
Email string `db:"email"`
}名前付きクエリ
:name構文で名前付きパラメーターを使用し、構造体またはマップを渡します:
query := "INSERT INTO users (name, email) VALUES (:name, :email)"
_, err := db.NamedExecContext(ctx, query, user)sqlx.In
sqlx.InはスライスをSQLのIN句に展開します:
ids := []int{1, 2, 3}
query, args, _ := sqlx.In("SELECT * FROM users WHERE id IN (?)", ids)
query = db.Rebind(query)
db.SelectContext(ctx, &users, query, args...)Rebind
db.Rebind(query)は、?プレースホルダー(sqlx.Inが使用)をドライバー固有の形式(PostgreSQLでは$1、$2)に変換します:
StructScan
rows.StructScanを使用して、個々の行を構造体にスキャンします:
rows, _ := db.QueryxContext(ctx, "SELECT * FROM users")
for rows.Next() {
var u User
rows.StructScan(&u)
}MustExec
db.MustExecはクエリを実行し、エラーが発生するとパニックを起こします。エラーが常に致命的になるスキーマ移行やテストのセットアップに便利です。
db.MustExec(schema)Unsafe
db.Unsafe()は、マッピングされていないカラムをエラーとして返さず、黙って無視するバージョンを返します。SELECTが構造体のフィールド数より多くのカラムを返す場合に便利です。
sqlxとORMの比較
sqlxでは、Goの構造体にネイティブにバインドしながら、SQLを完全に制御できます。GORMなどのORMはSQLを隠蔽しますが、予期しないクエリを生成することがあります。明示的なSQLと使いやすいスキャンを両立したい場合はsqlxを使用します。
クイックチェック
sqlxのdb.SelectContextは何を行いますか?
復習:sqlx
重要なポイント:
- Get/Selectはdbタグを使って構造体に直接スキャンします
- :name構文とNamedExecContextで名前付きクエリを使用します
- スライスを使ったIN句にはsqlx.InとRebindを使用します
- ループ内で行ごとに構造体へスキャンするにはStructScanを使用します
よくある質問
「sqlx:構造体スキャンと名前付きクエリ」レッスンは無料ですか?
はい。「sqlx:構造体スキャンと名前付きクエリ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「sqlx:構造体スキャンと名前付きクエリ」で何を学びますか?
sqlxによるGet、Select、NamedExec ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「sqlx:構造体スキャンと名前付きクエリ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- database/sqlとドライバー
- sqlx:構造体スキャンと名前付きクエリ
- pgx:高性能PostgreSQLドライバー
- トランザクションとマイグレーション