omitempty在go中的使用方式
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中忽略空值字段。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
最新评论