golang/mgo:从插入中省略空字段

And*_*rew 3 go bson mgo

由于某种原因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.我做错了什么,或者根本不可能这样做?

And*_*rew 8

是的,所以问题是在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)