Golang : Build new URL for named or registered route with Gorilla webtoolkit example
Problem :
Ok, you want to construct a new URL with Gorilla webtoolkit but don't know how. For example, you have a named / registered route HandleFunc()
defined and you want to build a URL based on the named route.
Solution :
Use the Get()
method to retrieve the route base on the route name. Supply the URL()
method with parameters. 1 key to 1 value.
package main
import (
"fmt"
"github.com/gorilla/mux"
"net/http"
)
func SayHelloWorld(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, World!"))
}
func ProcessPathVariables(w http.ResponseWriter, r *http.Request) {
// break down the variables for easier assignment
vars := mux.Vars(r)
name := vars["name"]
job := vars["job"]
age := vars["age"]
w.Write([]byte(fmt.Sprintf("Name is %s \n", name)))
w.Write([]byte(fmt.Sprintf("Job is %s \n", job)))
w.Write([]byte(fmt.Sprintf("Age is %s \n", age)))
route := mux.CurrentRoute(r)
w.Write([]byte(fmt.Sprintf("Route name is %v \n", route.GetName())))
}
func main() {
mx := mux.NewRouter()
mx.HandleFunc("/", SayHelloWorld).Name("home")
// this route name is person
mx.HandleFunc("/person/{name}/{job}/{age:[0-99]+}", ProcessPathVariables).Name("person")
// get the person route and build a new URL with 1 key to 1 value parameters.
url, err := mx.Get("person").
URL("name", "Boo",
"job", "CEO",
"age", "37")
if err != nil {
fmt.Println(err)
}
builtURL := url.String()
fmt.Printf("URL : %v \n", builtURL)
http.ListenAndServe(":8080", mx)
}
Output :
URL : /person/Boo/CEO/37
References :
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+4.6k Fix yum-complete-transaction error
+13.3k Golang : Normalize unicode strings for comparison purpose
+10.3k Golang : Surveillance with web camera and OpenCV
+7.5k Golang : Convert(cast) []byte to io.Reader type
+12k Swift : Convert (cast) Int to String ?
+17.7k Golang : How to make function callback or pass value from function as parameter?
+6.3k Golang : Create zip/ePub file without compression(use Store algorithm)
+8.7k Golang : Test a slice of integers for odd and even numbers
+8.3k Golang : Launch Mac OS X Preview (or other OS) application from your program example
+11.1k Golang : Search and extract certain XML data example
+11.6k Golang : Skip blank/empty lines in CSV file and trim whitespaces example
+14k Golang : How do I get the local IP (non-loopback) address ?