一、前言
go中所有类型都有默认值,比如string默认为"",int默认为0。而有时候空string 或者int的0值是有业务含义的,那么如何识别一个字段的空值还是默认的,还是开发者设置的空那?
二、问题展示
假设客户端要传输的body内容为如下结构:
type Person struct {
Name string
Age int
Address string
}
person := &Person{Name: "加多", Address: ""}
bb, err := json.Marshal(person)
那么客户端把消息内容序列化为二进制后,通过网络传输到服务端后,服务端以上面结构反序列化:
p := Person{}
json.Unmarshal([]byte(bb), &p)
fmt.Println(p)
然后会发现p.Age ==0 并且p.Address == "",那么服务端就不知道到底是客户端业务需要设置为Age为0,还是客户端没有设置,而是因为默认值才0的。