Cấu trúc dự án
Một service Fountain tiêu chuẩn có cấu trúc dưới đây. ftkit init tạo khung phần lớn cấu trúc này; một vài entry (có ghi chú) do bạn thêm hoặc do các lệnh ftkit khác sinh ra. Phần chú thích mô tả từng entry cấp cao nhất; các thư mục được đánh dấu BẮT BUỘC là những thư mục mà ftkit verify yêu cầu (server, biz, biz/core, biz/dal). Tất cả những thứ còn lại là tùy chọn và chỉ được kiểm tra khi có mặt.
text
.
├── main.go # Điểm khởi đầu: bootstrap fountain → server.NewServer() → .Serving()
├── go.mod # Định nghĩa Go module
├── config.yaml # bạn tự cung cấp — cấu hình runtime (config.example.yaml cũng được chấp nhận); không do init sinh ra
│
├── server/ # BẮT BUỘC — tầng transport & lifecycle
│ ├── server.go # struct server, NewServer(), Initialize/Serving/Destroy/Info
│ ├── route.go # Nối route HTTP (initHTTPHandle, versioning API, group)
│ ├── conf.go # Nạp cấu hình server
│ ├── server_callback.go # Callback giữa các controller cho server
│ └── version_migrate.go # Hook migrate schema/phiên bản
│
├── biz/ # BẮT BUỘC — gốc tầng nghiệp vụ
│ ├── biz.go # blank-import các package controller để chúng tự đăng ký
│ ├── core/ # BẮT BUỘC — controller, mỗi domain nghiệp vụ một package
│ │ └── core.go # interface / kiểu cơ sở dùng chung cho controller
│ └── dal/ # BẮT BUỘC — tầng truy cập dữ liệu
│ ├── dao/ # data access object + registry managers.go (tùy chọn)
│ │ └── managers.go # Đăng ký factory DAO, hằng số cache/db/storage
│ ├── models/ # model lưu trữ cho database (tùy chọn)
│ └── do/ # data object dùng ở tầng cache/Redis (tùy chọn)
│
├── pkg/ # Package nội bộ dùng chung, tái sử dụng được (tùy chọn)
├── internal/ # Package riêng tư của framework / không export
├── cmd/ # Các điểm khởi đầu lệnh bổ sung (tùy chọn — không do init tạo khung)
├── docs/ # Tài liệu service (tùy chọn)
├── scripts/ # Script build, test và công cụ (build.sh, tidy.sh, …) (tùy chọn)
├── tests/ # Bộ test và fixture
├── tools/ # Công cụ cho lập trình viên
├── examples/ # Ví dụ sử dụng chạy được
├── data/ # Dữ liệu tĩnh / file seed
├── public/ # Tài nguyên tĩnh công khai
├── deployment/ # Manifest triển khai (docker/, k8s/)
│
├── Dockerfile # Build container
├── docker-compose.yml # Môi trường nhiều service tại máy local
├── start_dev_env.sh # Khởi động môi trường dev local
├── .env.example # Biến môi trường mẫu
├── .github/ # Cấu hình, instruction và skill của GitHub
├── .gitlab/ # Cấu hình GitLab
├── .gitlab-ci.yml # Pipeline CI của GitLab
├── .pre-commit-config.yaml # Hook pre-commit (gitleaks, gitlint, …)
├── .vscode/ # Cấu hình editor
├── .editorconfig # Quy tắc định dạng của editor
├── .gitignore # Quy tắc git ignore
├── .gitattributes # Thuộc tính git
├── .dockerignore # Quy tắc docker ignore
├── CODEOWNERS # Bản đồ chủ sở hữu code
└── LICENSE # Giấy phépPackage <service>_client/ — thư viện client có kiểu mà các service khác import để gọi service này — không nằm trong khung khởi tạo ban đầu; nó được sinh ra sau này cho service và nằm ở gốc repository, ngay cạnh main.go.