首页 >后端开发 >Golang >如何在 Golang 中使用 MongoDB 将一个结构体嵌入到另一个结构体中而不丢失数据?

如何在 Golang 中使用 MongoDB 将一个结构体嵌入到另一个结构体中而不丢失数据?

Susan Sarandon
Susan Sarandon原创
2024-11-08 18:28:02483浏览

How to Embed a Struct in Another Struct with MongoDB in Golang Without Losing Data?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn