2017-02-10 53 views
-1

Привет Я работаю над проектом golang. Когда я пытаюсь использовать slugs с http.HandleFunc, я получаю ошибку «404 страница не найдена». Когда я снова забираю прочь, моя работа по маршрутизации снова.Golang http.HandleFunc не работает со слизнями

В основной у меня есть:

http.HandleFunc("/products/feedback/{slug}", AddFeedbackHandler) 

Какие вызовы:

var AddFeedbackHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){ 
    w.Write([]byte("ChecksOut")) 
}) 

Когда я заменяю путь с:

http.HandleFunc("/products/feedback", AddFeedbackHandler) 

Он снова работает. Что может быть причиной этого? Пожалуйста, простите меня, если это основной вопрос, я новичок в golang и все еще пытаюсь понять его. Благодаря!

+1

AWAIK, текущий HTTP библиотека Golang не поддерживает captureing '{}' пробкового в пути, может быть, вы должны использовать что-то вроде https://github.com/gorilla/mux – ymonad

+1

Обратите внимание, что документация HandleFunc не претендует на поддержку слизней. Документация Go достаточно хороша, вы можете вообще предположить, что функциональность не документа не существует. – Adrian

ответ

1

Попробуйте следующее:

const feedbackPath = "/products/feedback/" // note trailing slash. 

func AddFeedbackHandler(w http.ResponseWriter, r *http.Request) { 
    var slug string 
    if strings.HasPrefix(r.URL.Path, feedbackPath) { 
     slug = r.URL.Path[len(feedbackPath):] 
    } 
    fmt.Println("the slug is: ", slug) 
    w.Write([]byte("ChecksOut")) 
} 

Добавьте обработчик с этим кодом:

http.HandleFunc(feedbackPath, AddFeedbackHandler) 

косую черту на пути требуется для матча поддерева. Вы можете прочитать информацию об использовании конечной косой черты в ServeMux documentation.

playground example