Cấu trúc một dự án Golang

Không giống các framework của các ngôn ngữ khác (Ruby on Rail, Laravel, SpringBoot), các framework của Golang thường không có cấu trúc mặc định. Điều này vừa lợi vừa hại. Lợi là sự linh hoạt mềm dẻo, có tính cá nhân. Hại là khi đổi dự án, sẽ hơi mệt nếu cấu trúc khác biệt. Do đó, cộng đồng xuất hiện nhiều đề xuất các cấu trúc của một dự án Golang.

Ảnh trên lấy từ blog qqq.ninja, với một đề xuất cấu trúc dự án Go khá quen thuộc.

Các thư mục thường có cmd (thường là thư mục root), internal (thư mục chứa code của dự án hiện tại) và pkg (thư mục chia sẻ được). Mình cũng hay làm vậy, điểm khác biệt là file gốc main.go nằm ngang thư mục gốc thay vì nằm trong cmd.

Trong thư mục cmd, có thể có nhiều hơn một app. Đây là điểm đáng chú ý, kiểu mình viết 2 phần mềm (và sẽ build sau) chung trong một khối code. Ảnh trên thì chỉ có 1 app và 1 file main.go trong thư mục cmd này luôn. Do mình hay tách riêng các app thành các khối code khác nhau nên trong cmd chỉ có 1 app và file main.go đưa ra ngoài luôn, ngang thư mục gốc.

Thư mục internal chứa code của ứng dụng hiện tại và không chia sẻ với các dự án khác.

Thư mục pkg (nghe đã ra package) của ứng dụng hiện tại và CÓ THỂ chia sẻ với các dự án khác.

Reference:

https://qqq.ninja/blog/post/go-structure

Leave a Comment