ホームページ > バックエンド開発 > Golang > Golang と MongoDB の埋め込み型で継承のような動作を実現するにはどうすればよいですか?

Golang と MongoDB の埋め込み型で継承のような動作を実現するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-08 07:47:02
オリジナル
292 人が閲覧しました

How to Achieve Inheritance-Like Behavior with Embedded Types in Golang and MongoDB?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート