Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Handling Requests in Go

Introduction

Handling HTTP requests is a fundamental skill in web development. In this tutorial, we will explore how to handle requests using the Go programming language. We will cover the basic concepts and provide examples to help you understand how to manage different types of HTTP requests.

Setting Up Your Go Environment

Before we start, make sure you have Go installed on your machine. You can download it from the official Go website. Once installed, you can verify the installation by running the following command:

go version

If Go is installed correctly, you should see the version information.

Creating a Basic HTTP Server

Let's start by creating a simple HTTP server in Go. Create a new file named main.go and add the following code:

package main

import (
    "fmt"
    "net/http"
)

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

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}
                

This code creates an HTTP server that listens on port 8080 and responds with "Hello, World!" to any requests at the root URL.

To run the server, use the following command:

go run main.go

Open your browser and navigate to http://localhost:8080. You should see "Hello, World!" displayed.

Handling Different HTTP Methods

HTTP methods such as GET, POST, PUT, and DELETE are used to perform different actions on a resource. Let's modify our server to handle different HTTP methods.

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    switch r.Method {
    case "GET":
        fmt.Fprintf(w, "GET request received")
    case "POST":
        fmt.Fprintf(w, "POST request received")
    case "PUT":
        fmt.Fprintf(w, "PUT request received")
    case "DELETE":
        fmt.Fprintf(w, "DELETE request received")
    default:
        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
    }
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}
                

This code checks the HTTP method of the incoming request and responds accordingly.

Reading Request Data

To handle POST requests, you often need to read data sent by the client. Let's modify our handler to read and print the body of a POST request.

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    if r.Method == "POST" {
        body, err := ioutil.ReadAll(r.Body)
        if err != nil {
            http.Error(w, "Unable to read body", http.StatusBadRequest)
            return
        }
        fmt.Fprintf(w, "POST request received: %s", string(body))
    } else {
        fmt.Fprintf(w, "Only POST requests are supported")
    }
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}
                

This code reads the body of a POST request and includes it in the response.

To test it, you can use Postman or a similar tool to send a POST request to http://localhost:8080 with some data in the body.

Conclusion

In this tutorial, we covered the basics of handling HTTP requests in Go. We created a simple HTTP server, handled different HTTP methods, and read data from POST requests. With these skills, you can start building more complex web applications in Go.