【问题标题】:How to redirect URL in Go main method?如何在 Go main 方法中重定向 URL?
【发布时间】:2016-01-22 10:37:55
【问题描述】:

我在 Go 中设置了一个 GorrilaMux,如果在浏览器中输入特定的 URL,它将进行 API 调用。如果 URL 作为命令行参数给出,我想在我的 main 方法中进行相同的 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(????)

 }

【问题讨论】:

    标签: go http-redirect


    【解决方案1】:

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

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

    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 是合乎逻辑的。

    【讨论】:

    • 不不,我知道如何设置处理程序。我想要做的是,我不想打开我的浏览器并输入 URL 以通过路由器触发 API 调用,而是想在程序中通过命令行参数触发 API 调用。因此,如果我输入命令行: go run *.go -url="localhost:8080/Whatever" go 程序的 main 方法将解析 URL 并将其发送到路由器。我基本上是想弄清楚如何在 main 方法中将 URL 发送到 Mux 路由器
    猜你喜欢
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    相关资源
    最近更新 更多