I have been using go lang and the Echo framework for all of my app builds over the past six months and can’t see myself ever returning to a javascript or python backend.
Here is how I set up a very basic backend in 4 simple steps:
Initial Setup #
Create a Directory for the project to live, create main.go & .env file and go mod init:
mkdir projectname
cd projectname
touch main.go
touch .env
touch .gitignore
go mod init github.com/username/projectname
Within my .gitignore I will include my .env file, any tmp files, and the _templ.go files that are generated so as to not create too much of a mess in my version history.
Install Dependencies #
go get ........
// Some packages I use:
https://github.com/joho/godotenv
https://github.com/labstack/echo
https://github.com/a-h/templ
Main.go file initial #
package main
import (
)
func main() {
}
Setup Makefile/Taskfile with reqs to run app, etc. as well as my .air.toml file for hot reloading #
.air.toml:
root = "."
tmp_dir = "tmp"
[build]
bin = "./tmp/main"
cmd = "templ generate && npx tailwindcss -i view/css/app.css -o public/styles.css && go build -o ./tmp/main ."
delay = 1000
exclude_dir = ["assets", "tmp", "vendor"]
exclude_file = []
exclude_regex = [".*_templ.go"]
exclude_unchanged = false
follow_symlink = false
full_bin = ""
include_dir = []
include_ext = ["go", "tpl", "tmpl", "templ", "html"]
kill_delay = "0s"
log = "build-errors.log"
send_interrupt = false
stop_on_error = true
[color]
app = ""
build = "yellow"
main = "magenta"
runner = "green"
watcher = "cyan"
[log]
time = false
[misc]
clean_on_exit = false
Makefile
run: build
@./bin/appname
install:
@go install github.com/a-h/templ/cmd/templ@latest
@go get ./...
@go mod vendor
@go mod tidy
@go mod download
@npm install -D tailwindcss
@npm install -D daisyui@latest
build:
@npx tailwindcss -i view/css/app.css -o public/styles.css
@templ generate view
@go build -o bin/appname main.go
up: ## Database migration up
@go run cmd/migrate/main.go up
reset:
@go run cmd/reset/main.go up
down: ## Database migration down
@go run cmd/migrate/main.go down
migration: ## Migrations against the database
@migrate create -ext sql -dir cmd/migrate/migrations $(filter-out $@,$(MAKECMDGOALS))
seed:
@go run cmd/seed/main.go
You now have a skeleton of a go app that you can use to create whatever it is that you want.
In the next installment of this guide, I will show you how I use Templ and tie in Tailwindcss/DaisyUI and other various services to build my apps.