This is my boilerplate for a Go http server project. Feedback and suggestions are encouraged!
Go to file
sneak ae232ea6ab
All checks were successful
continuous-integration/drone/push Build is passing
update readme
2020-09-30 05:09:52 -07:00
cmd/httpd fixed gitignore which mistakenly omitted the cmd dir 2020-09-30 01:28:06 -07:00
httpserver rename misnamed file (handleadmin->handlelogin) 2020-09-30 01:32:28 -07:00
.drone.yml initial 2020-09-29 23:35:07 -07:00
.gitignore fixed gitignore which mistakenly omitted the cmd dir 2020-09-30 01:28:06 -07:00
Dockerfile fixed gitignore which mistakenly omitted the cmd dir 2020-09-30 01:28:06 -07:00
go.mod now does logging and auth middleware 2020-09-30 00:48:56 -07:00
go.sum now does logging and auth middleware 2020-09-30 00:48:56 -07:00
LICENSE initial 2020-09-29 23:35:07 -07:00
Makefile middlewares all now have the same signature 2020-09-30 01:18:30 -07:00
README.md update readme 2020-09-30 05:09:52 -07:00

gohttpserver

Build Status

This is my boilerplate for a go HTTP server, designed to be a starting point template for new projects, with most things conveniently stubbed out and ready for simple and fast customization, with sane defaults.

Many ideas are taken from Mat Ryer's talk titled "How I Write HTTP Web Services after Eight Years" at GopherCon 2019, seen here:

https://www.youtube.com/watch?v=rWBSMsLG8po

Contributing

Contributions are welcome! Please send me an email if you'd like an account on this server to submit PRs.

Alternately, even just feedback is great: sneak@sneak.berlin

Features

  • Basic logging middleware
  • Stub Authentication middleware
  • Helper functions for encoding/decoding json
  • Healthcheck route
  • No global state

Design Decisions

  • TLS is terminated somewhere else, like on a sidecar or reverse proxy.
  • logging: rs/zerolog
  • configuration: spf13/viper
  • mux/router: gorilla/mux
    • thinking about switching to go-chi/chi which supports contexts and HandlerFunc-wrapping middleware
  • templating: TBD (suggestions welcome)
  • database: TBD (thinking about go-gorm/gorm)

TODO

  • Database Boilerplate
  • sync.Once example for precompiling templates
  • Bundling Static Assets Into Binary
  • Metrics Endpoint / Request Statistic Aggregation

Author

License

WTFPL (aka public domain):

            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
                    Version 2, December 2004

 Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>

 Everyone is permitted to copy and distribute verbatim or modified
 copies of this license document, and changing it is allowed as long
 as the name is changed.

            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. You just DO WHAT THE FUCK YOU WANT TO.