Сервер получает запрос GET
с параметром territory_id
. Этот параметр может быть nil
, если пользователю не нужен фильтр по территории, или может иметь номер integer
, если пользователь хочет получать записи только для указанной c территории.
Код:
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_in
равно ISNULL
, то фильтр для этого параметра не работает, в противном случае, если territory_in
равен 5, например, записи берутся там, где значение в поле территории равно 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. Но мне интересно, как отправить нулевой параметр в функцию хранения в golang?
Я использую sqlx и pgx.