เกริ่นนำ
เนื่องจากช่วงนี้ผมได้มาเริ่มต้นโปรเจค 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}}
    
Top comments (0)