在 Golang 中使用 MongoDB 将一个结构体嵌入到另一个结构体中
在 Golang 中,将一个结构体嵌入到另一个结构体中允许您继承来自嵌入结构。但是,在使用嵌入式结构和 MongoDB 时,您可能会遇到问题,可能会导致嵌入式字段数据丢失。
理解问题
考虑一个场景,您需要根据用户角色为用户资源提供不同的 JSON 响应。一个响应包含一个“秘密”字段,该字段只应向管理员显示。
在当前代码中,您已为 User 和 adminUser 创建单独的结构,后者包含“秘密”字段。但是,使用继承将 User 嵌入到 adminUser 中(类型 adminUser struct { User; Secret string })无法按预期工作。
解决方案
要解决此问题,您可以利用 bson 包的“inline”标志。通过使用 bson:",inline",您可以将嵌入结构的字段内联到父结构中。
type adminUser struct { User `bson:",inline"` Secret string `json:"secret,omitempty" bson:"secret,omitempty"` }
这种方法允许您访问 adminUser 结构中 User 结构的两个字段。
其他注意事项
请注意,从数据库读取时使用 bson:",inline" 可能会导致重复键错误,因为两个结构都包含“Secret”字段。为了避免这种情况,建议从 User 结构中删除“Secret”字段,并仅将其包含在 adminUser 结构中。这确保了“秘密”字段只能通过 adminUser 结构访问,从而提供所需的控制级别。
以上是如何在 Golang 中使用 MongoDB 将一个结构体嵌入到另一个结构体中而不丢失数据?的详细内容。更多信息请关注PHP中文网其他相关文章!