与 MongoDB go client 一起使用时 bson struct 标签的必要性
Necessity of bson struct tag when using with MongoDB go client
我正在观看有关如何创建使用 MongoDB 持久化的 Go restful API 的教程(更准确地说是 this)。
讲师在他的模型(结构)中使用 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驱动程序example并没有这样做。
事实上,根本没有使用结构标签。
使用 bson
标签的目的/用途是什么?
我想到的一件事是,有人想要创建自定义 mongo _id
字段,在这种情况下,应该使用该结构字段的显式 bson
映射被宣布。
bson
标签还有其他附加值吗?
MongoDB 驱动程序仅使用 bson
标签。 json
标签仅用于 encoding/json
包(或其他处理 JSON marshaling/unmarshaling 的第三方包)。
您不需要指定和使用 bson
标签,在这种情况下,驱动程序在编码结构值时通常只使用小写的字段名称。 bson
标签是必需的,但是当您需要不同的名称时。
即使您想使用小写的字段名称,指定 bson
标签也是一个好习惯,因为有时您可能需要重命名结构字段,这会导致麻烦和不一致。如果您指定 bson
标签,即使您以后重命名字段也没关系,它们仍将编组到相同的属性中,并且解编它们将继续工作。
bson 标签还可以包含 flags 以更改默认封送处理行为:
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.
我正在观看有关如何创建使用 MongoDB 持久化的 Go restful API 的教程(更准确地说是 this)。
讲师在他的模型(结构)中使用 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驱动程序example并没有这样做。
事实上,根本没有使用结构标签。
使用 bson
标签的目的/用途是什么?
我想到的一件事是,有人想要创建自定义 mongo _id
字段,在这种情况下,应该使用该结构字段的显式 bson
映射被宣布。
bson
标签还有其他附加值吗?
MongoDB 驱动程序仅使用 bson
标签。 json
标签仅用于 encoding/json
包(或其他处理 JSON marshaling/unmarshaling 的第三方包)。
您不需要指定和使用 bson
标签,在这种情况下,驱动程序在编码结构值时通常只使用小写的字段名称。 bson
标签是必需的,但是当您需要不同的名称时。
即使您想使用小写的字段名称,指定 bson
标签也是一个好习惯,因为有时您可能需要重命名结构字段,这会导致麻烦和不一致。如果您指定 bson
标签,即使您以后重命名字段也没关系,它们仍将编组到相同的属性中,并且解编它们将继续工作。
bson 标签还可以包含 flags 以更改默认封送处理行为:
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.