golang中patch的问题 区分 零值 空值 未赋值
现象描述
假如有这么一个结构体
type Dog struct { Breed string WeightKg int }
对他进行初始化,将其编码为JSON格式
func main() { d := Dog{ Breed: "dalmation", } b, _ := json.Marshal(d) fmt.Println(string(b)) }
则输出的结果为:{"Breed":"dalmation","WeightKg":0}, 明显 dog 的weight是未知,而不是0,并不是我们想要的结果
带来的问题
在 http 中更新有全量(put)和部分(patch)。我们无法区分他们。
因为我们不传值的时候,他默认是零值,譬如:一个 bool 值,不传和传false 都一样。这可不行
解决方法
使用 指针类型 可进行区别 零值和未传值
type UpdateListenRequest struct { FromSystem *string `json:"from_system"` SendTo []notices.SendType `json:"send_to"` Enabled *bool `json:"enabled"` }
这时候就通过 nil 值判断
func (in *UpdateListenRequest) Patch() bson.M { f := bson.M{} if in.FromSystem != nil { f["from_system"] = in.FromSystem } if in.Enabled != nil { f["enabled"] = in.Enabled } if in.SendTo != nil { f["send_to"] = in.SendTo } return f }
譬如:Enabled
当 为 nil 时,说明 没有传值
当为 false 时,传的值就是 false
当为 true 时, 传的值就是 true
参考
0顶
0 踩
共 0 条评论