go - 如何在 Go main 方法中重定向 URL?

标签 go http-redirect

我在 Go 中设置了一个 GorrilaMux,如果在浏览器中输入特定的 URL,它将进行 API 调用。如果 URL 作为命令行参数给出,我想在我的主要方法中进行相同的 API 调用。然而,似乎能够做到这一点的 http.redirect() 方法需要一个 HTTP ResponseWriter 和一个 *HTTPRequest 变量作为函数参数。我不知道如何在 main 方法中生成这些变量。我该怎么做,或者是否有更好的方法从 Golang 中的 URL 调用 API?

设置路由器的代码

func main(){
   router := mux.NewRouter().StrictSlash(true)
   for _, route := range routes { //Sets up predefined routes
     router.
        Path(route.Path).
        Name(route.Name).
        Handler(route.HandlerFunc)
    }

  URL:="localhost:8080/whatever" //URL I want to redirect, route would be "/whatever"

 http.redirect(????)

 }

最佳答案

HTTP 重定向是对客户端的响应,应该从处理程序的调用中调用。 http.redirect(w http.ResponseWriter, r *http.Request) 函数在主函数的上下文中没有任何意义。

您可以像这样为给定的路由注册处理程序:

router.Path("/whatever").Handler(func(writer http.ResponseWriter, req *http.Request) {
    http.Redirect(writer, req, "localhost:8080/whatever", http.StatusMovedPermanently)
))

这会添加到路由器的路径并调用简单的 http.Handlerfunc,其中包含对 http.Redirect(...) 的调用。这是有道理的,因为我们正在处理对客户端连接的响应。返回 301 状态代码和重定向目标的 URL 是合乎逻辑的。

关于go - 如何在 Go main 方法中重定向 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33293072/

相关文章:

if-statement - Golang 模板变量 isset

docker - 如何通过ENV变量在Docker中构建进程

oop - 如何在 GO 中进行嵌套的面向对象的函数调用

algorithm - codility:峰值:在性能部件测试中实现go有什么问题?

java - 如何在 java 中跟踪重定向的 url?

golang RFC2822转换

JavaScript 相关页面重定向?

html - 是什么导致用户在提交表单时转到新页面,可以用 JavaScript 完成吗?

redirect - URL 片段和 302 重定向

django - 在 http 和 https 上运行 Gunicorn