一、参数校验问题
使用go做web服务时,经常需要对请求参数进行校验,有些必填参数需要校验是否为空。
经常会遇到参数a为int类型,但是其值取值范围为0-xxx。0也是有意义的。
即参数a如果传0也算传参了,但是go中传0会被认为是没有传,无法通过校验,导致出现问题。
目前的解决方法是将请求参数类型设置为*int,即int指针。这样做就可以对a做nil判断。
传0之后其指针不会为nil,可以通过校验。
二、json解析问题
假设我们收到二进制数据,需要用json.UnMarshal解析成结构体,结构体类型为interface。
如果二进制数据类型为int的话,会被解析成float类型,因为go认为所有数值类型都是float类型。
需要使用json.NewDecoder对象
decoder := json.NewDecoder(bytes.NewReader(respData))
decoder.UseNumber()
err = decoder.Decode(resp)
调用UseNumber之后,再调用Decode解析
将解析出来的对象转换成json.Number,然后调用String方法转成字符串,然后使用strconv.AtoI将其转为int。
需要转换成int64的话也可以调用json.Number的Int64方法转成int64
三、待补充