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 サイトの他の関連記事を参照してください。