Обработчик функций GoLang с использованием стандартной библиотеки - PullRequest
0 голосов
/ 22 января 2020

У меня есть конечная точка типа events/{id} и обработчик для нее. Как я могу получить {id} без использования Gorilla / Mux. Какие встроенные альтернативы GoLang могут достичь этого? Нужно делать это без gorilla / Mux или других сторонних библиотек. Я знаю, что это можно сделать с помощью mux.Vars, но я не могу использовать это здесь.

Ответы [ 2 ]

2 голосов
/ 22 января 2020

Если вам уже удалось перенаправить трафик c на ваш обработчик, то вы можете просто разобрать путь URL-адреса самостоятельно:

func HandlerFunc(w http.ResponseWriter, request *http.Request) {
    segments := strings.Split(request.URL.Path, "/")
    // If path is /events/id, then segments[2] will have the id
}

Request.URL.Path уже декодирован URL-адресом, так что если ваш параметры могут содержать косые черты, вместо них используйте Request.RequestURI и url.PathUnescape :

segments := strings.Split(r.RequestURI, "/")
for i := range segments {
    var err error
    segments[i], err = url.PathUnescape(segments[i])
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }
}
1 голос
/ 22 января 2020

Вы можете просто получить фрагмент строки, начинающийся после /events/:

func eventHandler(w http.ResponseWriter, r *http.Request) {
    id := r.URL.Path[len("/events/"):]
    w.Write([]byte("The ID is " + id))
}

func main() {
    http.HandleFunc("/events/", eventHandler)
}
...