如果我在中间件中使用http.Redirect,在调用next.ServeHTTP(w,r)之前,我是否必须在http.Redirect之后显式返回?
如果我有这样的东西,我是否必须在每个http.Redirect后显式返回,以便代码在重定向后停止执行?如果我不回来会怎么样?
// HTTPSNonWWWRedirect redirects http requests to https non www.
func HTTPSNonWWWRedirect(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.TLS == nil {
u := *r.URL
u.Scheme = "https"
if r.Host[:3] == "www" {
u.Host = r.Host[4:]
http.Redirect(w, r, u.String(), http.StatusMovedPermanently)
return
}
http.Redirect(w, r, u.String(), http.StatusMovedPermanently)
return
}
next.ServeHTTP(w, r)
})
}
答案 0 :(得分:0)
http.Redirect
只是将用户重定向到其他路线。它不会从代码执行中突破。
您还可以使用else
语句环绕最后next.ServeHTTP(w, r)
,使其看起来更干净。但是Go的惯用语倾向于使用return
而不是else
。