HTTP Handling and Routing in Go Programming Language

Go programming language (Golang) provides excellent support for handling HTTP requests and routing. With the help of built-in libraries like net/http and gorilla/mux, developers can easily create robust and efficient web applications.

HTTP Handling

In Go, HTTP handling involves defining functions, known as handlers, that handle specific HTTP requests. These handlers can be set up to respond to different HTTP methods (GET, POST, PUT, DELETE, etc.) and specific routes or paths.

To set up an HTTP handler, you need to define a function that takes two arguments: an http.ResponseWriter and an *http.Request. The http.ResponseWriter is used to write the response back to the client, while the http.Request contains all the information about the incoming request.

Here's an example of a simple HTTP handler in Go:

func helloHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World!")

To serve this handler, you need to register it with the http package. This can be done using the http.HandleFunc() function:

http.HandleFunc("/", helloHandler)

In this example, the helloHandler function will be called whenever a request is made to the root path ("/") of the web server.


While the basic HTTP handlers allow you to define responses for specific paths, more complex web applications often require a routing mechanism to handle multiple routes and parameters. This is where a powerful package like gorilla/mux comes into play.

gorilla/mux is a popular third-party package that provides a flexible and easy-to-use router for Go web applications. It allows you to define routes with variables, create sub-routers, and handle various HTTP methods for each route.

To use gorilla/mux, you first need to install it using the following command:

go get -u

Here's an example of how to use gorilla/mux for routing in Go:

func main() {
    r := mux.NewRouter()
    r.HandleFunc("/", helloHandler).Methods("GET")
    r.HandleFunc("/users/{id}", userHandler).Methods("GET")

    http.ListenAndServe(":8080", r)

func helloHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World!")

func userHandler(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    id := vars["id"]
    fmt.Fprintf(w, "User ID: %s", id)

In this example, we create a new router using mux.NewRouter(). We then register two HTTP handlers, helloHandler and userHandler, for different routes ("/" and "/users/{id}"). The {id} part in the route is a variable that can be accessed using mux.Vars(r).


Handling and routing HTTP requests in Go is made easy with the built-in net/http package. For more advanced routing needs, packages like gorilla/mux provide additional features and flexibility. By leveraging these tools, developers can build scalable and performant web applications using the Go programming language.

noob to master © copyleft