ホームページ >バックエンド開発 >Golang >Golang の MongoDB を使用して JSON 応答に埋め込み構造体フィールドを含める方法

Golang の MongoDB を使用して JSON 応答に埋め込み構造体フィールドを含める方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-09 11:01:02698ブラウズ

How to Include Embedded Struct Fields in JSON Response with MongoDB in Golang?

MongoDB を使用した Golang での構造体の埋め込み

Golang では、構造体の埋め込みは、構造体を別の構造体内にネストすることで機能を拡張する手法です。構造体。ただし、埋め込み構造体と MongoDB を操作する場合、特定の課題が発生する可能性があります。

問題: JSON 応答からネストされたフィールドを除外する

次のユーザー構造体を考えてみましょう。 :

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"`
}

ただし、このアプローチでは、埋め込まれた User フィールドは無視されるため、Secret フィールドのみが返されます。

解決策: bson インライン フラグ

この問題を解決するために、bson パッケージは、JSON シリアル化と MongoDB ドキュメントのデコードに埋め込みフィールドを含めることを許可するインライン フラグを提供します。

type adminUser struct {
    User    `bson:",inline"`
    Secret  string `json:"secret,omitempty" bson:"secret,omitempty"`
}

この変更により、adminUser の User フィールド (Secret を除く) と Secret フィールドの両方が JSON 応答と MongoDB ドキュメントに含まれるようになります。

代替アプローチ

あるいは、User 構造体から Secret フィールドを削除し、それを adminUser 構造体にのみ含めることを検討することもできます。これにより、データ モデルが簡素化され、権限のある管理者のみがシークレットをデータベースに書き込み、データベースから読み取ることが保証されます。

以上がGolang の MongoDB を使用して JSON 応答に埋め込み構造体フィールドを含める方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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