0Pricing
Go Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. database/sqlとドライバー
  2. sqlx:構造体スキャンと名前付きクエリ
  3. pgx:高性能PostgreSQLドライバー
  4. トランザクションとマイグレーション
← Go Academyに戻る