我正在阅读有关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报告是否应将给定的路径和主机重定向到path +“ /”。如果为路径+“ /”而不是路径注册了处理程序,则应该发生这种情况-请参见ServeMux上的注释。
c +“ /” 已注册,而 c 未注册,所以我认为它应该直接返回true,但是为什么我们必须检查 path [ n-1]!='/'?这是有关http协议的问题吗?