为了账号安全,请及时绑定邮箱和手机立即绑定

与 MongoDB go 客户端一起使用时 bson struct 标记的必要性

与 MongoDB go 客户端一起使用时 bson struct 标记的必要性

Go
有只小跳蛙 2022-04-26 19:58:20
我正在观看有关如何创建使用 MongoDB 进行持久性的 Go RESTful API 的教程(更准确地说是这个)。讲师在他的模型(结构)中同时使用 json和bson标签,例如type NoteUpdate struct {    ID        string `json:"id,omitempty" bson:"_id,omitempty"`    Title     string `json:"title" bson:"title,omitempty"`    Content   string `json:"content" bson:"content,omitempty"`    ChangedAt int64  `json:"changed_at" bson:"changed_at"`}但是官方的 go 驱动程序示例并没有这样做。事实上,根本没有使用结构标签。bson使用标签的目的/用处是什么?我想到的一件事是有人想要创建自定义 mongo_id字段,在这种情况下bson,应该声明与该结构的字段的显式映射。bson标签还有其他附加价值吗?
查看完整描述

2 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

MongoDB 驱动程序仅使用bson标签。json标签仅用于encoding/json包(或其他处理 JSON 编组/解组的第 3 方包)。

您不需要指定和使用bson标签,在这种情况下,驱动程序在编码结构值时通常只使用小写的字段名称。bson但是,当您需要不同的名称时,标签是必需的。

bson即使您想使用小写的字段名称,指定标签也是一个好习惯,因为有时您可能需要重命名结构字段,这会导致麻烦和不一致。如果您指定bson标签,那么将来是否重命名字段都没有关系,它们仍将被编组到相同的属性中,并且解组它们将继续起作用。


查看完整回答
反对 回复 2022-04-26
?
动漫人物

TA贡献1815条经验 获得超10个赞

bson 标签也可以包含改变默认封送行为的标志:


OmitEmpty  Only include the field if it's not set to the zero value for the type or to

           empty slices or maps.


MinSize    Marshal an integer of a type larger than 32 bits value as an int32, if that's

           feasible while preserving the numeric value.


Truncate   When unmarshaling a BSON double, it is permitted to lose precision to fit within

           a float32.


Inline     Inline the field, which must be a struct or a map, causing all of its fields

           or keys to be processed as if they were part of the outer struct. For maps,

           keys must not conflict with the bson keys of other struct fields.


Skip       This struct field should be skipped. This is usually denoted by parsing a "-"

           for the name.


查看完整回答
反对 回复 2022-04-26
  • 2 回答
  • 0 关注
  • 215 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信