一句话总结:带有omitempty字段的成员,若是该字段为nil(字符串”“,空数组等),则打包的JSON结果不会有这个字段。json
咱们把proto文件自动生成go代码时会出现omitempty字段,以下数组
type Reply struct { Code uint32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` CodeMsg string `protobuf:"bytes,2,opt,name=codeMsg" json:"codeMsg,omitempty"` }
直接上代码ui
package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` Addr string `json:"addr,omitempty"` } func main() { p1 := Person{ Name: "simon", Age: 22, } data, err := json.Marshal(p1) if err != nil { panic(err) } // p1 没有为Addr赋值,这里打印出来不会出现Addr的字段 fmt.Printf("%s\n", data) p2 := Person{ Name: "simon", Age: 22, Addr: "China", } data2, err := json.Marshal(p2) if err != nil { panic(err) } // p2 则会打印全部 fmt.Printf("%s\n", data2) }
{"name":"simon","age":22} {"name":"simon","age":22,"addr":"China"} Process finished with exit code 0