gofiber/boilerplate: Khởi động dự án Go nhanh như chớp
Mệt mỏi với việc setup từ đầu mỗi lần làm project Go? gofiber/boilerplate cho bạn một cái nền sạch, có Docker sẵn, chạy được ngay.
Nguyễn Nhật Long
@nguyennhatlong1303
Mỗi lần bắt đầu một project Go mới, mình đều phải ngồi setup lại từ đầu cấu trúc thư mục, Dockerfile, config database, routing... Mất cả buổi sáng mà chưa viết được một dòng business logic nào. Rồi mình tìm được gofiber/boilerplate, và thật ra nó giải quyết đúng cái nỗi đau đó.
Fiber là gì, và tại sao lại cần boilerplate cho nó?
Nếu bạn chưa dùng Fiber thì nói ngắn gọn: nó là một web framework cho Go, lấy cảm hứng từ Express.js. Cái hay là nó cực kỳ nhanh (build trên fasthttp), API thì quen thuộc với dân Node.js, và DX khá dễ chịu.
Vấn đề là Fiber không có convention mạnh về cấu trúc project. Bạn tự do hoàn toàn mà đôi khi tự do quá lại thành gánh nặng. Nhất là khi onboard người mới vào team, hay khi bạn phải bắt đầu project thứ 5 trong năm.
Boilerplate này sinh ra để giải quyết đúng cái chỗ đó.
Cấu trúc project trông như thế nào?
Nhìn vào repo, cấu trúc thư mục khá clean và dễ đoán:
1.2├── database/ # Database connection, migration logic3├── handlers/ # Route handlers (controller layer)4├── models/ # Data models5├── static/ # Static files6├── app.go # Entry point7├── Dockerfile8├── Makefile9├── go.mod10└── go.sum
Theo kinh nghiệm của mình, cái layout này khá chuẩn cho một REST API service tầm trung. Không quá phức tạp như Clean Architecture với đủ thứ layer, nhưng cũng không phải nhét hết vào một file main.go kiểu học sinh.
Sự phân tách handlers và models là đủ để team 3-5 người làm việc mà không dẫm chân nhau. Nếu project lớn hơn, bạn sẽ cần refactor thêm nhưng đó là câu chuyện sau.
Docker và Makefile phần mình thích nhất
Cái mình đánh giá cao nhất ở boilerplate này là nó ship kèm một Makefile khá đầy đủ. Thay vì phải nhớ đống docker command dài loằng ngoằng, bạn chỉ cần:
1make help # Xem tất cả commands có sẵn2make build # Build Docker image3make up # Chạy project trong local container4make up-silent # Chạy background5make stop # Dừng container
Có cả make up-silent-prefork cái này dành cho khi bạn muốn test Fiber's prefork mode, tức là spawn multiple processes để tận dụng multi-core. Hữu ích khi benchmark performance trước khi deploy production.
Về production thì đơn giản hơn nữa:
1docker build -t gofiber .2docker run -d -p 3000:3000 gofiber ./app -prod
Flag -prod là để switch sang production config. Mình thấy pattern này khá gọn một binary, một flag, xong.
Dev workflow với VS Code
Boilerplate có recommend dùng Go extension của Google (golang.go). Không có gì đặc biệt ở đây, nhưng việc document rõ version và extension ID (golang.go) giúp team đồng bộ môi trường dễ hơn. Anh em hay bị tình trạng mỗi người dùng một version extension khác nhau, rồi format code không nhất quán cái này giảm thiểu được phần nào.
Chạy local không cần Docker thì đơn giản:
1go run app.go
Rồi vào http://localhost:3000. Không có gì phức tạp.
Đánh giá thẳng thắn: nên dùng trong trường hợp nào?
Mình thấy cái này hay ở chỗ nó không cố gắng làm quá nhiều thứ. Một số boilerplate khác nhét đủ thứ vào authentication, caching, message queue rồi bạn phải mất công gỡ ra những thứ không cần. Cái này giữ ở mức tối giản, bạn tự thêm vào theo nhu cầu.
| Trường hợp | Có nên dùng không? | Lý do |
|---|---|---|
| Prototype / side project nhanh | ✅ Rất nên | Setup xong trong 5 phút, focus vào logic |
| REST API service tầm trung | ✅ Nên | Cấu trúc đủ dùng, có Docker sẵn |
| Microservice nhỏ trong hệ thống lớn | ✅ Được | Nhẹ, fast, dễ containerize |
| Enterprise app phức tạp | ⚠️ Cân nhắc | Cần thêm layer, cần refactor nhiều |
| Project cần Clean Architecture nghiêm túc | ❌ Không phù hợp | Boilerplate này không đi theo hướng đó |
| Team chưa quen Go | ⚠️ Tùy | Tốt để học, nhưng cần hiểu rõ pattern |
Một vài điểm cần lưu ý
Release cuối cùng là v0.3.4 vào tháng 6/2023. Không phải là mới nhất, và activity trên repo cũng không quá sôi động (504 stars, 85 forks tính đến thời điểm mình viết). Điều này không có nghĩa là nó bad boilerplate đơn giản thì không cần update liên tục nhưng bạn nên tự check xem dependencies có outdated không trước khi dùng cho production.
Cụ thể, hãy chạy:
1go list -u -m all
Để xem có package nào cần update không. Fiber bản thân nó vẫn đang active develop, nên version trong go.mod của boilerplate có thể đã cũ.
Ngoài ra, boilerplate này không có sẵn:
- Authentication / JWT middleware
- Rate limiting config
- Logging structured (như zerolog hay zap)
- Testing setup
Những thứ đó bạn phải tự thêm. Mình thấy đây là trade-off hợp lý giữ core nhỏ gọn, không impose quá nhiều opinion lên bạn.
So sánh nhanh với các lựa chọn khác
Nếu bạn cần một cái gì đó đầy đủ hơn với auth và clean architecture, go-clean-arch là hướng đi tốt hơn. Còn nếu bạn chỉ muốn spin up một service nhanh với Fiber, cái này là đủ.
| Boilerplate | Framework | Docker | DB layer | Auth | Complexity |
|---|---|---|---|---|---|
| gofiber/boilerplate | Fiber | ✅ | ✅ basic | ❌ | Thấp |
| create-go-app | Fiber/Echo/... | ✅ | ✅ | ✅ | Trung bình |
| golang-standards/project-layout | Agnostic | ❌ | ❌ | ❌ | Cấu trúc thuần |
| go-clean-arch | Echo | ✅ | ✅ | ✅ | Cao |
Tóm gọn quyết định
Nếu bạn đang làm một project Go với Fiber và muốn có một cái nền để bắt đầu thay vì setup từ scratch clone cái này về, update dependencies, rồi bắt tay vào code thôi. Đừng overthink.
Nếu project của bạn phức tạp hơn hoặc cần convention chặt chẽ hơn, hãy dùng boilerplate này như một reference để học cách người ta tổ chức code, rồi tự build cái của mình.
Mình hay nói với junior trong team: đừng bao giờ bắt đầu từ file trắng khi có thể học từ những cái đã được validate. gofiber/boilerplate là một trong những cái đáng để nhìn vào.
Nguyễn Nhật Long
@nguyennhatlong1303Nguyễn Nhật Long is a Senior Frontend Engineer and Frontend Team Leader with 7 years of experience building real-time fintech platforms. Specializing in React, Next.js, TypeScript, and React Native, shipping 10+ products across Web, Mobile, Telegram Mini-Apps, and Web3.
Thấy hay? Chia sẻ cho bạn bè!