如何将 nil/null 参数传递给存储函数?
How do I pass a nil/null parameter to a stored function?
服务器收到一个 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: = , territory_in: = )`
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_in
是ISNULL
,那么这个参数的过滤器不起作用,否则,如果territory_in
等于5,例如,在 territory 字段中的值为 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
。因为当将 string
转换为 int
(strconv.Atoi (params ["territory_id"])
) territory_in
时,它将被设置为 0。但我想知道如何将空参数发送到存储函数戈朗?
我使用 sqlx 和 pgx。
如果将 territoryId
保存为 *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
.
服务器收到一个 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: = , territory_in: = )`
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_in
是ISNULL
,那么这个参数的过滤器不起作用,否则,如果territory_in
等于5,例如,在 territory 字段中的值为 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
。因为当将 string
转换为 int
(strconv.Atoi (params ["territory_id"])
) territory_in
时,它将被设置为 0。但我想知道如何将空参数发送到存储函数戈朗?
我使用 sqlx 和 pgx。
如果将 territoryId
保存为 *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
.