golang怎么判断是否传递了数值

起因

今天在做项目的时候有个需求就是状态必须传递,在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

你可能感兴趣的:(golang)