2015-10-23 17 views
-2

我在Go中設置了一個GorrilaMux,如果在瀏覽器中輸入特定的URL,將會進行API調用。如果URL是作爲命令行參數提供的,我想在我的主要方法中進行相同的API調用。但是,似乎可以執行此操作的http.redirect()方法需要HTTP ResponseWriter和一個* HTTPRequest變量作爲函數參數。我不知道如何在主要方法中生成這些變量。我該怎麼做,或者,有沒有更好的方法可以通過Golang中的URL進行API調用?如何在Go主方法中重定向URL?

代碼來設置路由器

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(????) 

} 

回答

1

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是合乎邏輯的。

+0

不,不,我知道如何設置處理程序。我想要做的不是打開瀏覽器並輸入URL來通過路由器觸發API調用,而是想通過程序中的URL通過命令行參數觸發API調用。 所以如果我輸入命令行: 去運行,*。去-url =「本地主機:8080 /不管」 的圍棋程序的主要方法將解析URL,並將其發送到路由器。我基本上試圖找出如何將URL發送到主方法內的Mux路由器 – AbhishekSaha