由于某种原因mgo,即使我已经设置了omitempty选项,也将空结构插入到db as null值中.
package main
import (
"fmt"
"encoding/json"
)
type A struct {
A bool
}
type B struct {
X int `json:"x,omitempty" bson:"x,omitempty"`
SomeA *A `json:"a,omitempty" bson:"a,omitempty"`
}
func main() {
b := B{}
b.X = 123
if buf, err := json.MarshalIndent(&b, "", " "); err != nil {
fmt.Println(err)
} else {
fmt.Println(string(buf))
}
}
Run Code Online (Sandbox Code Playgroud)
json编码器省略了SomeA属性,但在数据库中它就像那样"a" : null.我做错了什么,或者根本不可能这样做?
是的,所以问题是在json和bson编码器选项之间有选项卡,这就是为什么omitempty不起作用的原因.所以这是错的:
SomeA *A `json:"a,omitempty" bson:"a,omitempty"`
Run Code Online (Sandbox Code Playgroud)
相反,只需要一个空间,这一切都很好:
SomeA *A `json:"a,omitempty" bson:"a,omitempty"`
Run Code Online (Sandbox Code Playgroud)