例如,dgo doc
中有此代码段// If omitempty is not set, then edges with empty values (0 for int/float, "" for string, false
// for bool) would be created for values not specified explicitly.
type Person struct {
Uid string `json:"uid,omitempty"`
Name string `json:"name,omitempty"`
Age int `json:"age,omitempty"`
Dob *time.Time `json:"dob,omitempty"`
Married bool `json:"married,omitempty"`
Raw []byte `json:"raw_bytes,omitempty"`
Friends []Person `json:"friend,omitempty"`
Location loc `json:"loc,omitempty"`
School []School `json:"school,omitempty"`
DType []string `json:"dgraph.type,omitempty"`
}
评论被认为好像省略omitempty
是一件坏事。
答案 0 :(得分:0)
一如既往,这取决于您的特定用例和数据模型。
如果字段不适当,则该字段将在json.Marshal结果中丢失,如果其值是默认的零值类型。如果没有遗弃性,json将始终包含该字段,如果未设置为其他值,它将是默认的零值类型。例如,年龄字段的以下结构缺少遗弃性:
type Person struct {
Uid string `json:"uid,omitempty"`
Name string `json:"name,omitempty"`
Age int `json:"age"
}
p := Person{
Uid: "0x1",
}
js, _ := json.Marshal(&p)
生成的json将没有name字段,但是使用int的默认零值age,即0:
{"uid": "0x1", "age": 0}
如果将此json发送到Dgraph突变,则该节点的age设置为0并覆盖节点当前的age值,而name则保持不变。因此,在这种情况下,可以对age字段进行适当的修改,否则,即使您只想更改节点的name字段,也必须在使用json调用突变之前始终将age字段设置为正确的值。
如果希望在结构中未另外设置字段时始终将其设置为默认的零值,则不要对该字段使用temptempty。