Я читаю исходный код модуля http, и следующий код сбил меня с толку:
func (mux *ServeMux) shouldRedirectRLocked(host, path string) bool {
p := []string{path, host + path}
for _, c := range p {
if _, exist := mux.m[c]; exist {
return false
}
}
n := len(path)
if n == 0 {
return false
}
for _, c := range p {
if _, exist := mux.m[c+"/"]; exist {
return path[n-1] != '/' <<- why not return true directly
}
}
return false
}
В качестве комментария над этим методом: shouldRedirectRLocked сообщает, следует ли перенаправлять указанный путь и хостк пути + "/".Это должно произойти, если обработчик зарегистрирован для пути + "/", но не для пути - см. Комментарии в ServeMux.
c + "/" уже зарегистрирован и c нет, поэтому я думаю, что он должен возвращать true напрямую, но почему мы должны проверять path [n - 1]! = '/' ?Это вопрос по протоколу http?