起因
今天在做项目的时候有个需求就是状态必须传递,在golang中接收到json参数解析到结构体中数值类型不传递有一个默认的0,但是状态也可以传递0,怎么来判断是否传递了这个数值呢?
解决办法
方法一:
- 在解析之前给结构体默认值,案例如下:
var jsonBlob = []byte(`[
{"Name": "Platypus", "Order": "Monotremata"}
]`)
type Animal struct {
Name string
Order string
ID
int
}
animals := &Animal{ID: -9999}
err := json.Unmarshal(jsonBlob, animals)
if err != nil {
fmt.Println("error:", err)
}
fmt.Printf("%+v", animals)
方法二:
- 使用额外的结构体+指针类型,如果不传递解析为
nil
而不是0,如下:
type NodeXXX struct {
Date string `json:"date"`
Count *int32 `json:"count"`
}
方法三:
- 别人已经写好了库,自己使用就行
https://godoc.org/gopkg.in/guregu/null.v3