Skip to content
/ practicalgo Public template

A template for Go projects. Includes datastore, Go routines, web server, CLI commands, unit tests, and GitHub Actions with goreleaser.

License

Notifications You must be signed in to change notification settings

thisdougb/practicalgo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

practicalgo

A template for Go projects. Includes datastore, Go routines, web server, CLI commands, unit tests, and GitHub Actions with goreleaser.

Overview

This is a template for Go projects. I use this to bootstrap new projects, and to demonstrate Go concepts.

It is intended to have all the basic components required for a Go project. In a layout that is easy to understand, and easy to extend.

Always a work in progress...

Getting Started

To run as a webserver locally (requires Redis):

$ go run -tags dev ./...                                                      
2023/05/15 10:01:25 main.go:23: Version dev, built at unknown, commit none 
2023/05/15 10:01:25 main.go:33: Datastore connecting, host: localhost:6379, username: 
2023/05/15 10:01:25 main.go:40: Datastore connected.
2023/05/15 10:01:25 main.go:52: webserver.Start(): listening on port 8080

The web server is now running on port 8080:

$ curl http://localhost:8080/listusers/
No users found.

To run as a CLI tool:

 $ go run -tags dev ./... -action listusers -debug true
2023/05/15 11:28:30 main.go:25: Version dev, built at unknown, commit none 
2023/05/15 11:28:30 main.go:35: Datastore connecting, host: localhost:6379, username: 
2023/05/15 11:28:30 main.go:42: Datastore connected.
2023/05/15 11:28:30 listusers.go:38: CLI_GetUsers(): Users: []
$

Dynamic Config

The config module enables configuration to be set via environment variables. This makes it easy to deploy to different environments, without changing code.

Code usage:

log.Println("webserver.Start(): listening on port", cfg.ValueAsStr("API_PORT"))

Tasks

The tasks module enables actions to run via cli or Go routines in a loop.

Lightweight entry points using the same underlying methods. The benefit is that a task can be developed and tested as a cli command, and then called from a Go routine.

Tasks are implemented using types, with interfaces that isolate datastore methods. This makes mocking simpler, and cleaner.

About

A template for Go projects. Includes datastore, Go routines, web server, CLI commands, unit tests, and GitHub Actions with goreleaser.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages