Go Backend Clean Architecture: Hướng dẫn chi tiết từ Amit Shekhar

ByNgọc Trai MKT06/07/2026in GitHub Tools 0
go-backend-clean-architecture

Go Backend Clean Architecture là một template dự án Golang mã nguồn mở do Amit Shekhar xây dựng, giúp bạn triển khai backend theo kiến trúc sạch với Gin, MongoDB, JWT, Docker và test. Repo này giải quyết vấn đề code lộn xộn, khó bảo trì bằng cách phân tách rõ ràng thành 5 layer: Router, Controller, Usecase, Repository và Domain. Nó dành cho các lập trình viên Go muốn có một khung sườn chuẩn chỉnh, có sẵn xác thực JWT, tích hợp Docker, và đã viết test để bắt đầu dự án nhanh chóng – đặc biệt phù hợp với những ai đang học Clean Architecture hoặc cần một base code chuyên nghiệp.

Thank you for reading this post, don't forget to subscribe!

Những điểm chính

  • Kiến trúc sạch 5 layer (Router, Controller, Usecase, Repository, Domain) giúp code dễ mở rộng và bảo trì.
  • Xác thực JWT với access token và refresh token, kèm middleware sẵn sàng cho API public và private.
  • Tích hợp sẵn Docker và Docker Compose để chạy môi trường phát triển nhanh gọn.
  • Viết test với testify và mockery, có script generate mock code cho usecase, repository, database.
  • Hỗ trợ MongoDB qua official Go driver, cấu hình linh hoạt với Viper, mã hoá mật khẩu bằng bcrypt.

Go Backend Clean Architecture là gì và giải quyết vấn đề gì?

Go Backend Clean Architecture là gì và giải quyết vấn đề gì?
Go Backend Clean Architecture là gì và giải quyết vấn đề gì?

Đây là một dự án mẫu (template) viết bằng Go, áp dụng Clean Architecture do Robert C. Martin đề xuất. Thay vì nhồi nhét mọi thứ vào một file controller, dự án chia thành 5 tầng riêng biệt, mỗi tầng chỉ phụ trách một nhiệm vụ cụ thể: Router định tuyến, Controller xử lý request/response, Usecase chứa logic nghiệp vụ, Repository giao tiếp với database, và Domain định nghĩa model. Kết quả là bạn có một backend dễ kiểm thử, dễ thay đổi công nghệ (ví dụ từ MongoDB sang PostgreSQL) mà không ảnh hưởng đến các tầng khác. Theo tác giả, repo này được tổng hợp từ hơn 20 dự án Clean Architecture khác trên GitHub, nên nó đã được chắt lọc khá kỹ. Bạn có thể xem chi tiết tại repository gốc trên GitHub.

Những tính năng nổi bật của dự án này?

Những tính năng nổi bật của dự án này?
Những tính năng nổi bật của dự án này?

Dự án tích hợp sẵn các package phổ biến nhất trong hệ sinh thái Go: Gin cho HTTP routing (siêu nhanh), MongoDB driver chính thức, JWT cho access và refresh token, bcrypt để hash mật khẩu, Viper đọc config từ .env, và bộ test với testify + mockery. Điểm mạnh là có hẳn hai luồng API: public (signup, login) không cần token, và private (profile, task) cần Bearer token. Middleware JWT tự động kiểm tra access token ở mỗi request private. Ngoài ra, repo còn kèm Dockerfile và docker-compose.yaml để chạy cả Go app lẫn MongoDB chỉ với một câu lệnh – tiết kiệm thời gian setup môi trường. Một điểm cộng là có sẵn mock code cho layer usecase, repository và database, giúp viết unit test dễ dàng hơn.

Hướng dẫn cài đặt và sử dụng

Hướng dẫn cài đặt và sử dụng
Hướng dẫn cài đặt và sử dụng

Có hai cách chạy dự án: không Docker và có Docker. Làm theo các bước sau nghen.

Chạy không Docker

  1. Tạo file .env từ .env.example và cấu hình (nhớ đổi DB_HOST=localhost).
  2. Cài Go và MongoDB trên máy.
  3. Chạy lệnh go run cmd/main.go.
  4. Truy cập API tại http://localhost:8080.

Chạy với Docker

  1. Tạo file .env tương tự, để nguyên DB_HOST=mongodb.
  2. Cài Docker và Docker Compose.
  3. Chạy docker-compose up -d.
  4. API có sẵn ở http://localhost:8080.

Chạy test và generate mock

  • go test ./... để chạy tất cả test.
  • mockery --dir=domain --output=domain/mocks --outpkg=mocks --all và tương tự cho mongo để tạo mock code mỗi khi thay đổi interface.

API endpoints có sẵn: POST /signup, POST /login, GET /profile (cần token), POST /task, GET /task, POST /refresh. Chi tiết request mẫu có trong README.

Ai nên dùng và ai không nên?

Ai nên dùng và ai không nên?
Ai nên dùng và ai không nên?

Nếu bạn là lập trình viên Go mới bắt đầu học Clean Architecture, hoặc cần một template backend có sẵn xác thực và Docker để triển khai nhanh một dự án MVP, thì repo này rất hợp lý. Nó cũng phù hợp cho team muốn thống nhất coding convention và cấu trúc thư mục. Tuy nhiên, nếu bạn đã có kiến trúc riêng, hoặc dùng database khác MongoDB, hoặc cần thêm tính năng như GraphQL, queue, logging phức tạp, thì bạn sẽ phải custom khá nhiều. Một hạn chế là project chưa có nhiều test case (tác giả ghi TODO), mock code cần generate lại thủ công khi thay đổi interface. Ngoài ra, dự án dùng MongoDB nhưng chưa demo normalization vs denormalization – tác giả có blog riêng về chủ đề này. Tóm lại, đây là base code tốt để học và khởi động, nhưng chưa phải giải pháp one-size-fits-all cho production lớn.

Câu hỏi thường gặp

Dự án này có hỗ trợ PostgreSQL không?

Không, hiện tại chỉ dùng MongoDB qua official Go driver. Bạn có thể thay repository layer để chuyển sang SQL, nhưng sẽ cần viết lại toàn bộ repository và test tương ứng.

Tôi có cần biết nhiều về Go không?

Cần kiến thức cơ bản về Go và cách chạy project. Clean Architecture được giải thích qua blog của tác giả, nhưng nếu bạn mới hoàn toàn thì nên học Go trước.

Làm sao để thêm API mới?

Thêm file domain mới, rồi tạo repository, usecase, controller và route tương ứng. Tuân thủ đúng layer để giữ clean architecture.

Project này có sẵn CI/CD không?

Không có trong repo, nhưng bạn có thể tự thêm GitHub Actions hoặc tương tự dựa trên Dockerfile và lệnh test có sẵn.

Tôi có thể dùng thư viện khác thay cho Gin không?

Có thể, nhưng sẽ phải sửa router và controller layer. Clean Architecture cho phép thay đổi framework dễ dàng – đó là ưu điểm.

Kết luận

Go Backend Clean Architecture là một template đáng tham khảo nếu bạn muốn code Go có tổ chức, có sẵn JWT, Docker và test. Dù chưa hoàn hảo, nó vẫn là khoá học thực hành tốt từ một kỹ sư giàu kinh nghiệm. Hãy clone repo về, mở terminal lên và trải nghiệm ngay. Nếu thấy hữu ích, đừng quên để lại ngôi sao trên GitHub để ủng hộ tác giả.

Related Posts