SkillAgentSearch skills...

Golang Clean Web Api

Golang Clean architecture REST API example with a comprehensive real project. It uses docker, docker compose, redis, elasticsearch, kibana, filebeat, postgresql, prometheus, grafana. also use gin, gorm, viper, zerolog, zap, validator, dynamic search, swagger and JWT

Install / Use

npx skills add naeemaei/golang-clean-web-api

Installs into whichever agent you are using.

README

Golang Clean Web API (Dockerize) with a full sample project (Car Sale project)

System Design Diagram

<p align="center"><img src='/docs/files/system_diagram.png' alt='Golang Web API System Design Diagram' /></p>

Database Design Diagram

<p align="center"><img src='/docs/files/db_diagram.png' alt='Golang Web API System Design Diagram' /></p>

Give a Star! :star:

If you like this repo or found it helpful, please give it a star. Thanks!

Used Tools

  1. Gin as web framework
  2. JWT for authentication and authorization
  3. Redis for caching
  4. Elasticsearch for logging database
  5. Beat for log shipping
  6. Kibana as log viewer
  7. Postgresql as main database engine
  8. PgAdmin as database management tool
  9. Prometheus for metric database
  10. Grafana for metric dashboards
  11. Validator for endpoint input Validation
  12. Viper for configurations
  13. Zap for logging
  14. Zerolog for logging
  15. Gorm as ORM
  16. Swagger for documentation
  17. Docker compose to run project with all dependencies in docker

How to run

Run on local system

Start dependencies on docker

docker compose -f "docker/docker-compose.yml" up -d setup elasticsearch kibana filebeat postgres pgadmin redis prometheus node-exporter alertmanager grafana

Install swagger and run app

cd src
go install github.com/swaggo/swag/cmd/swag@latest
cd src/cmd
go run main.go
Address: http://localhost:5005

Stop

docker compose -f "docker/docker-compose.yml" down

Examples

Login
curl -X 'POST' \
  'http://localhost:5005/api/v1/users/login-by-username' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "password": "12345678",
  "username": "admin"
}'
Sample filters request body
City filter and sort
{
  "filter": {
    "Name": {
      "filterType": "text",
      "from": "t", 
      "type": "contains"
    } 
  },
  "pageNumber": 1,
  "pageSize": 10,
  "sort": [
    {
      "colId": "name",
      "sort": "desc"
    }
  ]
}
City in range filter
{
  "filter": {
    "Id": { // Column name
      "filterType": "number", // number, text,...
      "from": "1", 
      "to": "7", 
      "type": "inRange" // contains, equals,...
    } 
  },
  "pageNumber": 1,
  "pageSize": 10,
  "sort": [
    {
      "colId": "name",
      "sort": "desc"
    }
  ]
}

Run project with dependencies on Docker

docker compose -f "docker/docker-compose.yml" up -d --build

Web API Run in docker http://localhost:9002

Token Url: http://localhost:9002/api/v1/users/login-by-username
Username: admin
Password: 12345678

Kibana http://localhost:5601

Username: elastic
Password: @aA123456

Prometheus http://localhost:9090

Grafana http://localhost:3000

Username: admin
Password: foobar

PgAdmin http://localhost:8090

Username: h.naimaei@gmail.com
Password: 123456

Postgres Server info:

Host: postgres_container
Port: 5432
Username: postgres
Password: admin

Docker Stop

docker compose -f 'docker/docker-compose.yml' --project-name 'docker' down

Linux

  1. build Project and copy configuration
/src > go build -o ../prod/server ./cmd/main.go
/src > mkdir ../prod/config/ && cp config/config-production.yml ../prod/config/config-production.yml
  1. Create systemd unit
sudo vi /lib/systemd/system/go-api.service
  1. Service config
[Unit]
Description=go-api

[Service]
Type=simple
Restart=always
RestartSec=20s
ExecStart=/home/hamed/github/golang-clean-web-api/prod/server
Environment="APP_ENV=production"
WorkingDirectory=/home/hamed/github/golang-clean-web-api/prod
[Install]
WantedBy=multi-user.target
  1. Start service
sudo systemctl start go-api
  1. Stop service
sudo systemctl stop go-api
  1. Show service logs
sudo journalctl -u go-api -e

Project preview

Swagger

<p align="center"><img src='/docs/files/swagger.png' alt='Golang Web API preview' /></p>

Grafana

<p align="center"><img src='/docs/files/grafana.png' alt='Golang Web API grafana dashboard' /></p>

Kibana

<p align="center"><img src='/docs/files/kibana.png' alt='Golang Web API grafana dashboard' /></p>

Related Skills

View on GitHub
GitHub Stars401
CategoryDevelopment
Updated2d ago
Forks86

Languages

Go

Security Score

100/100

Audited on Aug 5, 2026

No findings