Golang : Gorilla mux routing example
This is a short tutorial on how to use Gorilla's mux. The code example below is taken from previous tutorial on web routing and with minor addition.
package main
import (
"fmt"
"github.com/gorilla/mux"
"net/http"
)
func SayHelloWorld(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, World!"))
}
func Greet(w http.ResponseWriter, r *http.Request) {
name := mux.Vars(r)["name"]
w.Write([]byte(fmt.Sprintf("Hello %s !", name)))
}
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 ", name)))
w.Write([]byte(fmt.Sprintf("Job is %s ", job)))
w.Write([]byte(fmt.Sprintf("Age is %s ", age)))
}
func main() {
mx := mux.NewRouter()
mx.HandleFunc("/", SayHelloWorld)
mx.HandleFunc("/{name}", Greet)
//to handle URL like
//http://website:8080/person/Boo/CEO/199
//http://website:8080/person/Boo/CEO/199 <- if age > 199, will cause 404 error
mx.HandleFunc("/person/{name}/{job}/{age:[0-199]+}", ProcessPathVariables)
http.ListenAndServe(":8080", mx)
}
Tests output :
URL : http://162.243.5.230:8080/person/Boo/CEO/199
Name is Boo Job is CEO Age is 199
URL : http://162.243.5.230:8080/person
Hello person !
For more details and advanced methods, please refer to the official Gorilla mux documentation.
See also : Golang : Get URI segments by number and assign as variable example
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
+9.5k Golang : Extract or copy items from map based on value
+30.5k Get client IP Address in Go
+24.5k Golang : Change file read or write permission example
+9.4k Golang : Create unique title slugs example
+32.5k Golang : Copy directory - including sub-directories and files
+6.8k Get Facebook friends working in same company
+18.2k Golang : Put UTF8 text on OpenCV video capture image frame
+16.1k Golang : How to check if input from os.Args is integer?
+12.4k Elastic Search : Return all records (higher than default 10)
+6.4k PHP : Proper way to get UTF-8 character or string length
+12.3k Golang : Get month name from date example
+5.4k Golang : What is StructTag and how to get StructTag's value?