如果你想让代码停止执行后,你是否必须在http.Redirect之后返回?

时间:2017-03-21 01:41:46

标签: go

如果我在中间件中使用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)
    })
}

1 个答案:

答案 0 :(得分:0)

http.Redirect只是将用户重定向到其他路线。它不会从代码执行中突破。

您还可以使用else语句环绕最后next.ServeHTTP(w, r),使其看起来更干净。但是Go的惯用语倾向于使用return而不是else