Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 如何将nil/null参数传递给存储函数?_Go_Sqlx - Fatal编程技术网

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

Go 如何将nil/null参数传递给存储函数?,go,sqlx,Go,Sqlx,服务器接收具有territory_id参数的GET请求。如果用户不需要按区域筛选,则此参数可以为nil;如果用户希望仅获取特定区域的记录,则此参数可以为整数 代码: postgresql中的存储过程是这样设计的:如果territory_in为null,则此参数的过滤器不起作用,否则,如果territory_in等于5,例如,在territory字段中的值为5的位置获取记录 如何在服务器端实现这一点? 如果我在postman中输入territory_id=nil,我会得到: 错误:整数的输入语法无

服务器接收具有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:


然后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"])