ホームページ  >  記事  >  バックエンド開発  >  sqlx を使用してネストされた構造体を効率的にスキャンするにはどうすればよいですか?

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

DDD
DDDオリジナル
2024-11-23 08:55:11445ブラウズ

How Can I Efficiently Scan Nested Structs with sqlx?

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

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

埋め込み構造体

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 が埋め込み構造体であるため、Customer 構造体にスキャンしようとするとエラーになります。フィールドは埋め込まれておらず、独自の db タグもありません。

これを解決するには、アドレスを埋め込みますCustomer:

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

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

JSON 出力

アドレスを埋め込むと、次のように JSON 出力がフラット化されます。以下:

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

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

以上がsqlx を使用してネストされた構造体を効率的にスキャンするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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