golangにはsqlxというdatabase/sql
の拡張機能を提供するライブラリがあります。
SQLを書いていると、WHERE句にIN
という条件を使いたくなることがありますが、sqlxでは普通のやり方ではこのIN
が利用できません。
sql := `SELECT * FROM users WHERE id IN (?)`
var users []User
if err := sqlx.Select(&users, sql, []int{1,2,3,4,5}); err != nil {
// これはエラーになる
}
sqlxはこの問題を解決するために、In(query string, args ...interface{}) (string, []interface{}, error)
というヘルパ関数を提供しています。
この関数を利用することでIN
条件を持つクエリを書くことが出来るようになります。
sql := `SELECT * FROM users WHERE id IN (?)`
sql, params, err := sqlx.In(sql, []int{1,2,3,4,5})
if err != nil {
log.Fatal(err)
}
// sql, paramsは以下のような形で返され、有効なクエリを実行することが出来るようになります。
//
// sql: "SELECT * FROM users WHERE id IN (?, ?, ?, ?, ?)"
// params: [1 2 3 4 5]
var users []User
if err := sqlx.Select(&users, sql, params...); err != nil {
log.Fatal(err)
}