Golang と MongoDB の型の埋め込み: 継承のようなソリューション
ユーザー インターフェイスと内部操作の両方のデータ モデルを設計する場合、一般的に特定のコンテキストでのみ公開されるべき機密フィールドを含める必要がある場合。 Golang では、bson パッケージを利用して、特定のフィールドの包含または除外などのデータのシリアル化を管理できます。
次のシナリオを考えてみましょう:
type User struct { Id bson.ObjectId `json:"id,omitempty" bson:"_id,omitempty"` Name string `json:"name,omitempty" bson:"name,omitempty"` Secret string `json:"-,omitempty" bson:"secret,omitempty"` }
この例では、Secret フィールドは json:"-" でマークされており、一般ユーザーに返される JSON 応答には含まれません。ただし、管理者ユーザーの場合は、このフィールドにアクセスする必要があります。コードの重複を避けるために、次のように User 構造体を adminUser 構造体に埋め込むことを検討するかもしれません。
type adminUser struct { User Secret string `json:"secret,omitempty" bson:"secret,omitempty"` }
残念ながら、このアプローチは期待どおりに機能しません。返されるのは Secret フィールドのみであり、フィールドは返されません。
この問題を解決するには、bson パッケージの bson:",inline" フラグを利用します。このフラグを使用すると、埋め込まれた User 構造体からフィールドを継承しながら、追加のフィールドも定義できます:
type adminUser struct { User `bson:",inline"` Secret string `json:"secret,omitempty" bson:"secret,omitempty"` }
これにより埋め込みの問題は解決されますが、データベースからデータを読み取るときに重複キー エラーが発生するという新しい問題が発生します。 。これを解決するには、Secret フィールドを User 構造体から adminUser 構造体に移動することをお勧めします。これにより、Secret フィールドが adminUser コンテキストでのみ公開されるようになります。このようにして、ユーザーの役割に基づいて機密フィールドの公開を管理しながら、一貫したデータ モデルを維持できます。
以上がGolang と MongoDB の埋め込み型で継承のような動作を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。