Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Creating Web Servers with Go

Introduction

Creating web servers is a fundamental skill in web development. Go (or Golang) is a powerful language that makes it straightforward to build web servers. This tutorial will guide you through the process of creating a basic web server using Go, from setting up your environment to handling different types of HTTP requests.

Setting Up Your Environment

Before you start writing code, you need to set up your development environment.

1. Download and install Go from the official Go website.

2. Verify the installation by opening a terminal and typing:

go version

You should see output similar to:

go version go1.16.5 linux/amd64

Creating Your First Web Server

Let's start by creating a basic web server that responds with "Hello, World!" for any HTTP request.

1. Create a new directory for your project and navigate into it:

mkdir mywebserver
cd mywebserver

2. Create a file named main.go and open it in your favorite text editor:

3. Add the following code to main.go:

                    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)
                    }
                

4. Run your web server by executing:

go run main.go

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

Handling Different Routes

Next, let's modify our web server to handle different routes (URLs).

1. Update your main.go file to include additional routes:

                    package main

                    import (
                        "fmt"
                        "net/http"
                    )

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

                    func aboutHandler(w http.ResponseWriter, r *http.Request) {
                        fmt.Fprintf(w, "About Page")
                    }

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

2. Restart your web server and navigate to http://localhost:8080/about. You should see "About Page" displayed.

Handling Query Parameters

Sometimes, you may need to handle query parameters in your web server. Let's see how to do this.

1. Update your main.go file to handle query parameters:

                    package main

                    import (
                        "fmt"
                        "net/http"
                    )

                    func helloHandler(w http.ResponseWriter, r *http.Request) {
                        name := r.URL.Query().Get("name")
                        if name == "" {
                            name = "World"
                        }
                        fmt.Fprintf(w, "Hello, %s!", name)
                    }

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

2. Restart your web server and navigate to http://localhost:8080/?name=Go. You should see "Hello, Go!" displayed.

Serving Static Files

Often, web servers need to serve static files such as HTML, CSS, and JavaScript files. Let's see how to serve static files using Go.

1. Create a directory named static and add an HTML file named index.html:

                    
                    
                    
                        
                        
                        Static File
                    
                    
                        

Hello from a static file!