如果我使用http。在中间件中重定向,我是否明确必须在 http 之后返回。在呼叫下一个之前重定向。ServeHTTP(w, r(?
如果我有这样的东西,我是否必须在每个 http 之后显式返回。重定向以使代码在重定向后停止执行?如果我不回来会怎样?
// 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)
})
}
http.Redirect
只是将用户重定向到不同的路由。它不会从代码执行中分离出来。
您还可以使用else
语句来环绕最后一个next.ServeHTTP(w, r)
,使其看起来更干净。但是围棋的成语倾向于使用return
而不是else
。