ホームページ >バックエンド開発 >Golang >データを失わずにGolangのMongoDBを使用して構造体を別の構造体に埋め込む方法は?

データを失わずにGolangのMongoDBを使用して構造体を別の構造体に埋め込む方法は?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-08 18:28:02506ブラウズ

How to Embed a Struct in Another Struct with MongoDB in Golang Without Losing Data?

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

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