Я делаю сервер API, используя GoLang, и я использую Mux в качестве HTTP-маршрутизатора. У меня есть одна конечная точка в моем приложении, /tasks
. Когда я достигаю этой конечной точки, я получаю массив результатов, как и ожидалось. Теперь я хочу опираться на это и добавить необязательный параметр запроса в URL, чтобы он возвращал только N
результаты, например: /tasks?num=5
, который будет возвращать только 5 результатов. Я выполнил это с помощью обработчика ниже:
vars := r.URL.Query()
t := task{}
if numOfTasksParam, ok := vars["num"]; ok {
fmt.Printf("%+v", numOfTasksParam[0])
numOfTasks, err := strconv.Atoi(vars.Get("num"))
//return only n number of results
} else {
//return the entire result set
}
Я разработал это решение, потому что обнаружил, что URL.Query()
возвращает карту параметров запроса и, следовательно, я могу просто проверить, содержит ли эта карта ключ "Num". Если это так, клиент хочет N
количество результатов. Если нет, клиенту нужен полный набор результатов.
Основная проблема, с которой я столкнулся при таком подходе, заключается в том, что когда я go проверяю, существуют ли ключи, я делаю временную переменную с именем numOfTasksParam
, которая содержит значение параметра запроса, но оно содержит значение в виде строки, и мне нужно int
. Поэтому я должен каким-то образом использовать numOfTasksParam
, а затем создать другую переменную для преобразования ее в целочисленное значение.
Существует ли более краткий или удобный способ проверки, существует ли параметр запроса в URL-адресе запроса?