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