Go Graceful Shutdown

Graceful shutdown is a technique used to smoothly terminate an app. It allows the clients to receive data from the app. Also it gives time for the load balancer to deregister it and not send a traffic to it. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 // this is not an app with graceful shutdown package main import ( "fmt" "log" "net/http" "time" ) // this request takes long time to complete func indexHandler(w http....

Healthchecks - two most important Pod endpoints - Readiness & Liveness Check with Go examples

Every application should contain at least two endpoints: readiness check, health check. Readiness check should indicate when the app is ready to serve traffic. It should allow traffic when the app is correctly initialized. For example it should wait for the database connection to be established. The connection to cache or external API as well. This probe allows to cut off the traffic in case the app is unable to handle it....

Configuring Go application with flags, pflags, environment variables and Viper

There are multiple ways to configure your Go application. I will describe a few most common one in this article with code samples. Flags Go supports command line flags with builtin package flag. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 package main import ( "flag" "log" "net/http" ) func main() { addrPtr := flag.String("addr", ":8000", "addr of http server") flag.Parse() log.Printf("Listening on %s", *addrPtr) log....

November 6, 2023 4 min

Serving Static Website With Go

Serving static website in Go I would like to describe here how to serve static content with Go. Go http package provides handy function http.FileServer to serve such content. FileServer also allows to browse files when index.html is missing in a catalog. Preparing files Let’s create such structure. 1 2 3 4 5 6 7 $ tree . ├── assets │ ├── page.html │ └── styles │ └── main.css └── main....