Skip to content

raeperd/kickstart.go

Repository files navigation

kickstart.go

.github/workflows/build.yaml Go Report Card Coverage Status Go Reference Mentioned in Awesome Go
Minimalistic HTTP server template in Go that is:

  • Small (less than 300 lines of code)
  • Single file
  • Only standard library dependencies

Not a framework, but a starting point for building HTTP services in Go. This project was first introduced in GopherCon Korea 2024, See session in this link(in Korean) and see presentation in this link(in English)

Inspired by Mat Ryer & earthboundkid and even kickstart.nvim

Features

  • Graceful shutdown: Handles SIGINT and SIGTERM signals to shut down gracefully.
  • Health endpoint: Returns the server's health status including version and revision.
  • OpenAPI endpoint: Serves an OpenAPI specification using embed package
  • Debug information: Provides various debug metrics including pprof and expvars.
  • Access logging: Logs HTTP request details using slog.
  • Panic recovery: Catch and log panics in HTTP handlers gracefully.
  • Fully documented: Includes comments and documentation for all exported functions and types.

Getting started

  • Use this template to create a new repository
  • Or fork the repository and make changes to suit your needs.

Requirements

Go 1.22 or later

Suggested Dependencies

Build and run the server

$ make run
  • this will build the server and run it on port 8080
  • Checkout Makefile for more

Endpoints

  • GET /health: Returns the health of the service, including version, revision, and modification status.
  • GET /openapi.yaml: Returns the OpenAPI specification of the service.
  • GET /debug/pprof: Returns the pprof debug information.
  • GET /debug/vars: Returns the expvars debug information.

How to

How to start a new project

  • Use this template to create a new repository
  • Or fork the repository and make changes to suit your needs.
  • Find and replace all strings raeperd/kickstart.go with your repository/image name

How to remove all comments from the code

$ sed -i '' '/^\/\/go:embed/! {/^\s*\/\/.*$/d; /^\s*\/\*\*/,/\*\//d;}' *.go

Reference