使用go语言遇到的一些问题记录

一、参数校验问题

使用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

三、待补充