Go-Web
Modern Web Application with Golang "Keep it simple, stupid"
Stack
Backend
- HTTP Middleware Echo
- ORM library gorm
- Configuration env
- Load ENV variables from .env file godotenv
- Payload validation validator
- Cache Redis
- Localization gotext
- Database CockroachDB
- Releasing goreleaser
Frontend
- Server side templating Go Templates
- Module Bundler Parcel bundler
- Javascript UI library React
Getting Started
Project structure
Follows https://github.com/golang-standards/project-layout
Building From Source
This project requires Go +1.13 and Go module support.
To build the project run:
make
Bootstrap infrastructure and run application
This project requires docker and docker compose to run the required services.
- To run the services:
docker-compose up
- To create database
docker run --network="host" -it cockroachdb/cockroach:v19.2.1 sql --insecure -e "$(cat ./scripts/create.db.sql)"
-
Build web application
-
Start server
go run main.go
- Navigate to users list page
CI and Static Analysis
CI
All pull requests will run through CI, which is currently hosted by Github-CI. Community contributors should be able to see the outcome of this process by looking at the checks on their PR. Please fix any issues to ensure a prompt review from members of the team.
Static Analysis
This project uses the following static analysis tools. Failure during the running of any of these tools results in a failed build. Generally, code must be adjusted to satisfy these tools, though there are exceptions.
- go vet checks for Go code that should be considered incorrect.
- go fmt checks that Go code is correctly formatted.
- golangci-lint checks for things like: unused code, code that can be simplified, code that is incorrect and code that will have performance issues.
- go mod tidy ensures that the source code and go.mod agree.
Releasing
When a new tag is pushed, the version is released with goreleaser.
$ git tag -a v0.1.0 -m "First release"
$ git push origin v0.1.0 # => want to release v0.1.0
Tooling
- IDE plugin vscode-go
- Administration of cockroachdb DBeaver
- REST client Postman
- Go testing in the browser go-convey
- Benchmarking bombardier
Documentation
$ godoc github.com/starptech/go-web/pkg/controller
$ godoc -http=:6060
Visit localhost:6060 and search for go-web
Benchmarking
$ bombardier -c 10 -n 10000 http://localhost:8080/users