「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > sqlx を使用してネストされた構造体を効率的にスキャンするにはどうすればよいですか?

sqlx を使用してネストされた構造体を効率的にスキャンするにはどうすればよいですか?

2024 年 11 月 22 日に公開
ブラウズ:341

How Can I Efficiently Scan Nested Structs with sqlx?

sqlx を使用したネストされた構造体のスキャン

sqlx を使用する場合、ネストされた構造体には問題があります。ただし、ドキュメントでは、埋め込み構造体の使用による解決策が提供されています。

Embedded Structs

Sqlx は埋め込み構造体をサポートしており、Go の優先規則を使用してフィールドに値を割り当てることができます。埋め込み属性とメソッドの場合。

コード例

Address が埋め込み構造体ではない次のコードを考えてみましょう。

type Customer struct {
       Id      int     `json:"id" db:"id"`
       Name    string  `json:"name" db:"name"`
       Address Address `json:"adress"`
}

type Address struct {
       Street string `json:"street" db:"street"`
       City   string `json:"city" db:"city"`
}

このコードは、Address フィールドが埋め込まれておらず、独自の db タグがないため、Customer 構造体にスキャンしようとするとエラーが発生します。

これを解決するには、Address を埋め込みますinto Customer:

type Customer struct {
   Id     int    `json:"id" db:"id"`
   Name   string `json:"name" db:"name"`
   Address
}

Address を埋め込むことにより、そのフィールド (タグを含む) が Customer にプロモートされ、SQLX がクエリ結果からフィールドに値を入力できるようになります。

JSON Output

埋め込みアドレスは、以下に示すように JSON 出力をフラット化します:

{
    "id": 1,
    "name": "foo",
    "street": "bar",
    "city": "baz"
}

これに対処するには、DB 構造体を元の型に再マップするか、クエリ結果をスキャンしてマップに取り込みます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3