MongoDB を使用した Golang の別の構造体への構造体の埋め込み
Golang では、構造体を別の構造体内に埋め込むと、構造体からフィールドを継承できます。埋め込まれた構造体。ただし、埋め込み構造体と MongoDB を操作するときに問題が発生し、埋め込みフィールド データの損失につながる可能性があります。
問題の理解
次のようなシナリオを考えてみましょう。ユーザー ロールに基づいて、ユーザー リソースに対して異なる JSON 応答を提供する必要があります。 1 つの応答には、管理者にのみ表示される「Secret」フィールドが含まれています。
現在のコードでは、User と adminUser に別々の構造体を作成し、後者には「Secret」フィールドが含まれています。ただし、継承 (type adminUser struct { User; Secret string }) を使用して User を adminUser に埋め込むと、期待どおりに機能しません。
解決策
この問題を解決するには、次のようにします。 bson パッケージの「inline」フラグを利用できます。 bson:",inline" を使用すると、埋め込み構造体のフィールドを親構造体にインライン化できます。
このアプローチにより、adminUser 構造体内の User 構造体の両方のフィールドにアクセスできます。
追加の考慮事項
bson:",inline" は、両方の構造体に "Secret" フィールドが含まれているため、データベースから読み取るときに重複キー エラーが発生する可能性があります。これを回避するには、User 構造体から「Secret」フィールドを削除し、それを adminUser 構造体にのみ含めることをお勧めします。これにより、「Secret」フィールドには adminUser 構造体を介してのみアクセスできるようになり、必要なレベルの制御が提供されます。
以上がデータを失わずにGolangのMongoDBを使用して構造体を別の構造体に埋め込む方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。