Kinh nghiệm
5 phút đọc5 tháng 6, 20263

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.

N

Nguyễn Nhật Long

@nguyennhatlong1303

gofiber/boilerplate: Khởi động dự án Go nhanh như chớp

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:

TEXT
1.
2├── database/ # Database connection, migration logic
3├── handlers/ # Route handlers (controller layer)
4├── models/ # Data models
5├── static/ # Static files
6├── app.go # Entry point
7├── Dockerfile
8├── Makefile
9├── go.mod
10└── 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 handlersmodels 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:

Terminal
1make help # Xem tất cả commands có sẵn
2make build # Build Docker image
3make up # Chạy project trong local container
4make up-silent # Chạy background
5make 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:

Terminal
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:

Terminal
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ợpCó nên dùng không?Lý do
Prototype / side project nhanh✅ Rất nênSetup xong trong 5 phút, focus vào logic
REST API service tầm trung✅ NênCấu trúc đủ dùng, có Docker sẵn
Microservice nhỏ trong hệ thống lớn✅ ĐượcNhẹ, fast, dễ containerize
Enterprise app phức tạp⚠️ Cân nhắcCần thêm layer, cần refactor nhiều
Project cần Clean Architecture nghiêm túc❌ Không phù hợpBoilerplate này không đi theo hướng đó
Team chưa quen Go⚠️ TùyTố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:

Terminal
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à đủ.

BoilerplateFrameworkDockerDB layerAuthComplexity
gofiber/boilerplateFiber✅ basicThấp
create-go-appFiber/Echo/...Trung bình
golang-standards/project-layoutAgnosticCấu trúc thuần
go-clean-archEchoCao

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.

NN

Nguyễn Nhật Long

@nguyennhatlong1303

Nguyễ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è!