我有两个结构体,代表将插入到 mongodb 数据库中的模型。一个结构(投资)将另一个结构(集团)作为其字段之一。
type Group struct {
Base
Name string `json:"name" bson"name"`
}
type Investment struct {
Base
Symbol string `json:"symbol" bson:"symbol" binding:"required"`
Group Group `json:"group" bson:"group"`
Fields bson.M `json:"fields" bson:"fields"`
}
我遇到的问题是,在投资模型中,不需要组。如果没有组,我认为最好不要将其插入到数据库中。在 Go 中处理这样的数据库模型的最佳方法是什么?
tl;dr: Use ,omitempty
,如果您需要担心之间的差异零值 http://golang.org/ref/spec#The_zero_value和空/未指定,执行 GitHub API 的操作并使用指针 https://willnorris.com/2014/05/go-rest-apis-and-pointers.
Both json
and bson
支持,omitempty
标签。对于 json,“空值为 false、0、任何零指针或接口值,以及任何数组、切片、映射、或字符串长度为零”(json 文档 http://golang.org/pkg/encoding/json/)。对于bson来说,,omitempty
表示“仅包含该字段(如果该字段未设置为类型的零值或空切片或映射)”,并且零值 http://golang.org/ref/spec#The_zero_value包括空字符串和 nil 指针(bson 文档 http://godoc.org/labix.org/v2/mgo/bson).
因此,如果您确实需要一个 Group 结构,您可以放置一个*Group
相反,当指针为零时,它不会被存储。如果Investment
只需要持有团体的name,就更简单了:""
因为组名称会阻止存储组密钥。
bson
默认情况下已使用小写字段名称,因此您可以在匹配时从结构标记中省略该字段名称。json
默认为大写名称,因此如果需要小写,请在标签中指定小写名称。
所以,最好的情况,也许你可以使用:
type Investment struct {
Base
Symbol string `json:"symbol" binding:"required"`
Group string `json:"group,omitempty" bson:",omitempty"`
Fields bson.M `json:"fields"`
}
如果您遇到过类型零值(“”、0、false 等)与“未指定”不同的字段,您可以执行 GitHub API 的操作并将指针放入您的结构中 https://willnorris.com/2014/05/go-rest-apis-and-pointers——本质上是一个扩展*Group
trick.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)