Perm Chao
Posted on January 27, 2022
เกริ่นนำ
เนื่องจากช่วงนี้ผมได้มาเริ่มต้นโปรเจค API ด้วย Golang บ่อย
ผมเลยขอบันทึกไว้กันลืม
Stack
1) Golang
2) Go Fiber
3) Gorm
4) PostgreSQL
Steps
1) สร้าง Folder สำหรับที่อยู่ของโปรเจค
$ mkdir demo
$ cd demo
2) สร้าง go mod file
$ go mod init github.com/mossnana/demo
3) สร้าง Folders / Files ที่เก็บ source code
$ mkdir cmd
$ mkdir internal
$ mkdir pkg
** Folder **
- cmd
ไว้วางโฟรเดอร์ที่มีไฟล์ main.go สำหรับโปรแกรมต่าง ๆ เช่น
- server ตัว run web server
- migrator ตัว migrate db
- internal ไว้ใส่ไฟล์ที่เก็บ logic ที่เกี่ยวข้องกับตัว api นี้ ที่มีความเฉพาะตัวของ api นี้
- pkg ไว้เก็บไฟล์ที่ไว้ต่อกับโปรแกรมนอก เช่น function ต่อ database ๆลๆ
4) สร้าง Folders / Files ที่ไว้ run
Dockerfile
FROM golang:latest
WORKDIR /app
COPY . .
RUN go mod tidy
RUN go get github.com/githubnemo/CompileDaemon
RUN go build -o bin/migrator ./cmd/migrator
CMD CompileDaemon --build="go build -o bin/server ./cmd/server" --command="./bin/server"
- CompileDaemon ใช้เป็นตัว auto restart เมื่อ code เปลี่ยน
docker-compose.yml
version: "3.5"
services:
demo_service:
container_name: demo_service
build:
context: .
dockerfile: Dockerfile
volumes:
- ./:/app
restart: always
ports:
- "3000:3000"
networks:
- demo_net
env_file:
- ./.env
brij_db:
container_name: brij_db
image: postgres:14
volumes:
- "demo_db_data:/var/lib/postgresql/data"
ports:
- "5432:5432"
environment:
- POSTGRES_USER=demo
- POSTGRES_PASSWORD=demopassword
- POSTGRES_DB=demo
networks:
- demo_net
networks:
demo_net:
external: false
volumes:
demo_db_data:
external: false
Makefile
build:
docker-compose up -d --build
start:
docker-compose up -d
migrate:
docker exec -it demo_service /app/bin/migrator
stop:
docker-compose down
Project tree
.
├── cmd/
│ ├── demo/
│ │ └── main.go
│ └── migrator/
│ └── main.go
├── internal/
│ ├── model/
│ │ ├── sale.go
│ │ ├── purchase.go
│ │ └── account.go
│ ├── repository/
│ │ ├── sale.go
│ │ ├── purchase.go
│ │ └── account.go
│ ├── service/
│ │ ├── sale/
│ │ │ ├── v1/
│ │ │ │ ├── create.go
│ │ │ │ ├── read.go
│ │ │ │ ├── update.go
│ │ │ │ └── delete.go
│ │ │ └── v2/
│ │ │ ├── create.go
│ │ │ ├── read.go
│ │ │ ├── update.go
│ │ │ └── delete.go
│ │ └── ...
│ ├── handler/
│ │ └── sale/
│ │ ├── v1/
│ │ │ ├── create.go
│ │ │ ├── read.go
│ │ │ ├── update.go
│ │ │ └── delete.go
│ │ ├── v2/
│ │ │ ├── create.go
│ │ │ ├── read.go
│ │ │ ├── update.go
│ │ │ └── delete.go
│ │ └── ...
│ └── route/
│ ├── sale.go
│ ├── purchase.go
│ └── account.go
├── pkg/
│ ├── auth/
│ │ └── auth.go
│ └── gorm/
│ ├── driver.go
│ └── migrate.go
├── Dockerfile
├── docker-compose.yml
└── Makefile
การ Build
go build -o bin/{{ชื่อแอปใน main}} ./cmd/{{ชื่อแอปใน main}}
💖 💪 🙅 🚩
Perm Chao
Posted on January 27, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.