使用 MongoDB 在 Golang 中嵌入结构
在 Golang 中,嵌入结构是一种通过将结构嵌套在另一个结构中来扩展结构功能的技术结构。但是,在使用嵌入式结构和 MongoDB 时,可能会出现某些挑战。
问题:从 JSON 响应中排除嵌套字段
考虑以下 User 结构:
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"` }
使用 json:"-" 将 Secret 字段从 JSON 表示中排除。这在大多数不应泄露秘密信息的情况下很有用。
困境:管理路由和嵌入式结构
为管理员提供对秘密字段的访问权限,创建了一个 adminUser 结构,其中包含 User 结构作为嵌入字段:
type adminUser struct { User Secret string `json:"secret,omitempty" bson:"secret,omitempty"` }
但是,此方法仅返回 Secret 字段,因为嵌入的 User 字段将被忽略。
解决方案:bson 内联标志
为了解决此问题,bson 包提供了一个内联标志,允许在 JSON 序列化和 MongoDB 文档解码中包含嵌入字段。
type adminUser struct { User `bson:",inline"` Secret string `json:"secret,omitempty" bson:"secret,omitempty"` }
通过此修改,用户字段(不包括 Secret)并且 adminUser 中的 Secret 字段将包含在 JSON 响应和 MongoDB 文档中。
替代方法
或者,可以考虑删除 Secret 字段来自 User 结构,并且仅将其包含在 adminUser 结构中。这简化了数据模型,并确保只有授权管理员才能将机密写入数据库或从数据库中读取。
以上是如何在 Golang 中使用 MongoDB 在 JSON 响应中包含嵌入式结构字段?的详细内容。更多信息请关注PHP中文网其他相关文章!