Во-первых, я должен согласиться с ответами здесь, что говорят, что это, наверное, лучше вернуться сразу после редиректа. Если, однако, вы решили сделать некоторые другие вещи после этого (независимо от того, перенаправлены ли вы или нет), а затем функция, которая вызывается только при использовании перенаправления, то вы можете что-то делать по строкам:
func fooHandler(w http.ResponseWriter, r *http.Request) {
if needToRedirect {
http.Redirect(w, r, "http://www.google.com", 301)
defer func() {
// stuff that only happens if redirected, but happens last
}()
}
// stuff that happens whether redirected or not
// note that this will happen before the deferred func is called
}
Вот документация DEFER: http://blog.golang.org/defer-panic-and-recover
Это довольно просто. Отложенный вызов будет выполняться после того, как возвращается окружающая функция (fooHandler), но она все равно будет иметь доступ к чему-либо в области fooHandler, включая именованные возвращаемые значения. Также важно отметить, что отложенная функция будет вызвана даже во время паники, хотя ничего не произойдет, если она не называет recover()
.
EDIT: Вот простой пример того, как это работает: http://play.golang.org/p/5TgCv4O_rA
Как правило, если вы используете http.Redirect, вы хотели бы немедленно вернуться, так что браузер может следить за переадресацию. Могу ли я спросить, какой код придет после перенаправления? Кроме того, если вы не используете какую-либо структуру, в которой у вас есть доступ к базовому экземпляру того, что реализует http.ResponseWriter, вы не сможете узнать, что это за состояние. – user114241
Поскольку у меня есть структура-оболочка, которая будет отображать html-файл или нет, если была настроена перенаправление, тогда не следует отображать html-файл. –