为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 nil/null 参数传递给存储函数?

如何将 nil/null 参数传递给存储函数?

Go
UYOU 2023-08-21 14:48:40
服务器收到GET带有territory_id参数的请求。nil如果用户不需要按地区过滤,则该参数可以是,或者integer如果用户只想获取特定地区的记录,则可以有一个数字。代码: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}postgresql中的存储过程是这样设计的,如果territory_inis ISNULL,则该参数的过滤器不起作用,否则,如果territory_inis 等于 5,例如,将记录 Region 字段中值为 5 的记录。以及如何在服务器端实现这一点?如果我输入territory_id = nil邮递员,我会得到:ERROR: invalid input syntax for integer: "nil"如果为空,则:ERROR: invalid input syntax for integer: "null".也territroyID不可能相等nil。如何根据用户请求将 null 传递给函数?理论上我可以检查邮资功能territory_in = 0,而不是IS NULL。因为当将 a 转换string为int( strconv.Atoi (params ["territory_id"]))时territory_in,它将被设置为 0。但是我想知道如何将 null 参数发送到 golang 中的存储函数?我使用 sqlx 和 pgx。
查看完整描述

1 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

如果您保存territoryId为 a*int而不是int,则可以通过nil:


func strToIntPtr(s string) *int {

    i, err := strconv.Atoi(s)

    if err != nil {

        return nil

    }

    return &i 

}


territoryId := strToIntPtr(params["territory_id"])

然后任何territoryId时候nil它都不是有效的int。因此,它们可以传递nil、null、 或any(或任何非数字的内容),而您只需将其视为null。


查看完整回答
反对 回复 2023-08-21
  • 1 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信