您是否必须在 http 之后返回.如果您希望之后的代码停止执行,请重定向



如果我使用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

相关内容

  • 没有找到相关文章

最新更新