Go 如何将nil/null参数传递给存储函数?
服务器接收具有territory_id参数的GET请求。如果用户不需要按区域筛选,则此参数可以为nil;如果用户希望仅获取特定区域的记录,则此参数可以为整数 代码: postgresql中的存储过程是这样设计的:如果territory_in为null,则此参数的过滤器不起作用,否则,如果territory_in等于5,例如,在territory字段中的值为5的位置获取记录 如何在服务器端实现这一点? 如果我在postman中输入territory_id=nil,我会得到: 错误:整数的输入语法无效:nil 如果为空,则: 错误:整数的输入语法无效:null territroyID也不能等于零。如何根据用户请求将null传递给函数 理论上,我可以签入postages函数territory_In=0,而不是NULL。因为在将字符串转换为intstrconv.Atoi时,其中的参数[territory_id]territory_将设置为0。但我想知道如何向golang中的存储函数发送null参数 我使用sqlx和pgx。如果将territoryId保存为*int而不是int,则可以传递nil:Go 如何将nil/null参数传递给存储函数?,go,sqlx,Go,Sqlx,服务器接收具有territory_id参数的GET请求。如果用户不需要按区域筛选,则此参数可以为nil;如果用户希望仅获取特定区域的记录,则此参数可以为整数 代码: postgresql中的存储过程是这样设计的:如果territory_in为null,则此参数的过滤器不起作用,否则,如果territory_in等于5,例如,在territory字段中的值为5的位置获取记录 如何在服务器端实现这一点? 如果我在postman中输入territory_id=nil,我会得到: 错误:整数的输入语法无
然后territoryId在任何时候都是零,它不是一个有效的int。所以他们可以传递nil,null,或者任何不是数字的东西,你只要把它当作null。但是我想知道如何将null参数发送到golang中的存储函数?通过发送nil,不是nil,也不是null,而是nil,来自Go的一个。。。。因此,在Go中,您可以做的是将参数声明为var territoryId interface{}。由于任何接口的零值都是nil,因此默认为nil,然后在if short声明中执行strconv.Atoi操作,检查if的条件部分中的结果,如果它大于0,则将territoryId设置为该结果。将territoryId传递给sql执行代码,您就完成了。。。。类似这样的东西:@mkopriva通过发送nil,不是nil,也不是null,而是nil。我的问题不是发送什么:nil、null等。我问如何将GET请求中的参数转换为nil或int值。感谢您提供了带有接口的示例。对于接口,哪种方法更好,或者将postgresql函数更改为检查0?我不知道哪种方法更好,可能会选择对您更有意义的方法。
func GetDataList (response http.ResponseWriter, request * http.Request) {
params: = GetRequestParams (request.URL.Query ())
normalID, _: = strconv.Atoi (params ["normal_id"])
territoryId, _: = strconv.Atoi (params ["territory_id"])
var listToCheck [] ObjectDataNormal
query = `select * from get_list_for_predict (year: = $1, territory_in: = $2)`
rows, err = db.Queryx (query,
2011,
territoryId)
if rows! = nil {
// code
}
// code
}
func GetRequestParams (values url.Values) map [string] string {
urlValues: = make (map [string] string, len (values))
for k, v: = range values {
urlValues [k] = v [0]
}
return urlValues
}
func strToIntPtr(s string) *int {
i, err := strconv.Atoi(s)
if err != nil {
return nil
}
return &i
}
territoryId := strToIntPtr(params["territory_id"])