Go中基础类型默认值问题与解决

本文探讨了Go中结构体默认值带来的问题,如何通过指针类型识别字段是否被设置,以及利用Builder模式简化客户端代码,同时保持服务端对空值和默认值的区分。总结指出,当遇到问题时,增加一层抽象可能就是解决方案。
摘要由CSDN通过智能技术生成

d2fa3676fa9415a8370099620807e8ce.png

一、前言

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的。

三、问题解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值