Categorygithub.com/fsufitch/wire-web-demo
modulepackage
0.0.0-20200205150615-415d67629619
Repository: https://github.com/fsufitch/wire-web-demo.git
Documentation: pkg.go.dev

# README

Wire Web Application Demo

What is this? This is a simple webserver that just serves a visitor counter and its uptime seconds. It is built using Go, Postgres, and structured using dependency injection via Google Wire.

Buy why though? Because it serves as a good example for the future, for myself and others. The DI "modules" (config, log, db, etc) are fully-fledged and feature good unit testing and environment-based setup. They are ready to be copy-pasted to other projects, or used as reference points.

Some rationale and discussion behind how/why this was put together can be found in a blog post here.

Setup and running

Building. The code is built using Go 1.12 and Go modules. All you need to do to build it is:

go build

To re-generate wire_gen.go, use:

go generate

Testing. To run the unit tests and see coverage:

go test ./... -cover

On Windows, ignore any UAC port opening warning that comes up.

Environment. The runtime is parameterized via environment variables:

  • PORT - the port to serve the webserver on (optional; default=8080)
  • DATABASE - the PostgreSQL connection string for its database (required)
  • DEBUG - true/false toggle for debug logging (optional; default=false)

Database setup. The code bootstraps its own schema, so you just need to provide it with a database. An easy Docker-based way to do this would be:

docker run -p 5432:5432 postgres:latest
docker run --net=host -it postgres:latest psql postgres://postgres@localhost:5432
> CREATE DATABASE demo;

This would result in this connection string to be set as DATABASE (note the sslmode parameter):

postgres://postgres@localhost:5432/demo?sslmode=disable

Endpoints.

  • /uptime - displays the seconds since the server got started
  • /counter - increments and displays a visitor counter from the database

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Functions

No description provided by the author