omitempty在go中的使用
直接上代码:
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: "taoge", age: 30, } data, err := json.marshal(p1) if err != nil { panic(err) } fmt.printf("%s\n", data) fmt.println(p1.name, p1.age, p1.addr) p2 := person{ name: "cang laoshi", age: 18, addr: "japan", } data2, err := json.marshal(p2) if err != nil { panic(err) } fmt.printf("%s\n", data2) fmt.println(p2.name, p2.age, p2.addr) }
结果:
{"name":"taoge","age":30}
taoge 30
{"name":"cang laoshi","age":18,"addr":"japan"}
cang laoshi 18 japan
可以看到,有了omitempty后,如果addr为空, 则生成的json中没有addr字段。
可以去掉omitempty, 再试试。
go标记omitempty的含义
"omitempty"是go语言中的一个标记,用于在编码和解码json数据时控制字段的行为。它可以应用于结构体字段的标签中。
当字段被标记为"`omitempty`"时,它表示在编码json数据时,如果该字段的值为空值,即零值或空引用,则忽略该字段,不将其包含在生成的json中。换句话说,如果字段的值为零值或空引用,则不会在json中创建对应的键值对。
这个特性对于减少生成的json大小、提高网络传输效率以及使json数据更加简洁和可读是有用的。
以下是一个示例,展示了如何在go语言的结构体字段中使用"`omitempty`"标记:
type person struct { name string `json:"name"` age int `json:"age,omitempty"` email string `json:"email,omitempty"` }
在上述示例中,`age`和`email`字段都被标记为`omitempty`。当将`person`结构体编码为json时,如果`age`和`email`字段的值为空值(例如,`age`为0,`email`为空字符串),则在生成的json中将不会包含这些字段。只有当它们具有非空值时,才会在json中创建对应的键值对。
总之,`omitempty`是go语言中用于在编码和解码json时控制字段行为的标记,它指示在生成的json中忽略空值字段。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论