ホームページ  >  記事  >  バックエンド開発  >  Golang データベース クエリでスライスを含む「IN」句を処理する方法: 落とし穴を回避するには?

Golang データベース クエリでスライスを含む「IN」句を処理する方法: 落とし穴を回避するには?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-01 10:29:30877ブラウズ

How to Handle

Slice IN 句を使用した Golang データベース クエリ: 課題を理解する

Golang で整数のスライスを含む IN 句を利用しようとする場合データベース クエリを実行すると、予期しない動作が発生する可能性があります。この背後にある理由を調査し、慣用的な解決策を特定しましょう。

標準のデータベース/SQL パッケージは、スライスを含む IN 句を自動的に処理しません。代わりに、クエリをデータベースに直接変換します。バインド変数 (?) は単一の引数を表します。これにより、スライスの長さに基づいて可変の数の引数を含めようとすると混乱が生じる可能性があります。

たとえば、次のクエリは失敗します。

var levels = []int{4, 6, 7}
rows, err := db.Query("SELECT * FROM users WHERE level IN (?);", levels)

この制限を克服するには、次のようにします。 sqlx パッケージを活用すると、データベース クエリをより詳細に制御できます。 sqlx.In を使用してクエリを前処理することで、スライスを引数として指定できます。

var levels = []int{4, 6, 7}
query, args, err := sqlx.In("SELECT * FROM users WHERE level IN (?);", levels)

これで、スライスの長さに対応する多数のバインド変数が含まれるようにクエリが変更され、次のようになります。

sqlx.In の使用方法について詳しくは、Godoc にあるドキュメントを参照してください。このアプローチは、Golang データベース クエリでスライスを使用して IN 句を処理する、より慣用的で柔軟な方法を提供します。

以上がGolang データベース クエリでスライスを含む「IN」句を処理する方法: 落とし穴を回避するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。