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