🧵 ساختار پروژه تو Go — نظم بدون دردسر 😎
وقتی یه پروژه کوچیک Go مینویسی، همهچی تو یه فایل جا میشه و دنیا قشنگه.
ولی وقتی یهکم رشد میکنه و چند تا پکیج و سرویس میچسبونیش بهش، کمکم حس میکنی داری تو آمازون گم میشی!
اینجاست که یه ساختار تمیز میتونه نجاتت بده.
گو میگه: «نه کلاس، نه فریمورک سنگین — فقط یه ساختار ساده ولی اصولی!»
🏗 ساختار پیشنهادی برای یه پروژهی واقعی Go:
myapp/
├── cmd/ → نقطهی ورود اپلیکیشن
├── internal/ → منطق داخلی، مخصوص خود پروژه
├── pkg/ → پکیجهای قابل استفاده عمومی
├── api/ → تعریف API (مثلاً protobuf یا Swagger)
├── configs/ → فایلهای پیکربندی
├── scripts/ → ابزارهای dev و deploy
├── test/ → تستهای integration
├── go.mod
└── README.md
🚀مسیر cmd/ — نقطهی شروع ماجرا
اینجا فایلهای main.go میره.
ممکنه چند تا اپلیکیشن داشته باشی (مثلاً یه سرور و یه worker):
cmd/
├── server/
│ └── main.go
├── worker/
│ └── main.go
📌 تو این پوشه فقط باید فایلهایی باشن که برنامه رو راه میندازن، نه منطق اصلی.
🧠مسیر internal/ — جعبهابزار محرمانه
گو یه قابلیت جالب داره:
هر چی توی internal/ باشه، فقط از داخل خود پروژه قابل import کردنه.یعنی مثل اینه که روش قفل زدی 🔒
اینجا معمولاً چیزهایی مثل:
logic اصلی برنامه
لایهی دسترسی به دیتابیس
implementation سرویسها
قرار میگیرن.
📦مسیر pkg/ — ابزارهای قابل استفاده بیرونی
اگه یه بخش از کدت خیلی جنرال و قابل reuseه، میتونی بندازیش تو pkg/.
مثلاً یه logger، یه پکیج محاسباتی، یا ابزار auth.
pkg/
└── logger/
└── logger.go
🛰مسیر api/ — قراردادهای ارتباطی
این پوشه جای تعریف APIهاست. مثلاً:
فایلهای .proto برای gRPC
تعریفهای OpenAPI یا Swagger
JSON schema
⚙️ مسیر configs/ — تنظیمات محیط
هر محیط یه سری تنظیم داره. dev، staging، production.
این فایلها میتونن yaml، json یا env باشن.
🛠مسیر scripts/ — ابزارهای پشتپرده
هر کاری که میخوای اتومات یا دستی انجام بدی، مثل:
✅ اجرای migration
✅بیلد(build) کردن
✅ اجرای تستها
✅پاک سازی (cleanup)
🧪مسیر test/ — تستهای جدیتر
واسه integration یا end-to-end testهایی که بزرگتر از unit test معمولین، این پوشه خیلی بهدرد میخوره.
📌 تو Go معمولا unit testها کنار خود کدها هستن (something_test.go)
ولی تستهای سیستمی رو بهتره اینجا نگهداری.
🧼 چند نکتهی طلایی
✅ ساختار پروژه هم باید همینطور باشه: شفاف، بدون پیچیدگی الکی.
✅ از همون اول نیازی نیست همهی پوشهها رو بسازی. ساختار با رشد پروژه شکل میگیره.
✅ چیزی که قرار نیست بیرون استفاده بشه، بندازش تو internal/ و راحت بخواب!
✅ هر چی ماژولارتر، بهتر: تفکیک مسئولیت باعث میشه تیم راحتتر توسعه بده، تست کنه، و تغییر بده.
حالا یه ابزار میخوام بهت معرفی کنم که این کارو برات اتوماتیک انجام میده.
https://github.com/Melkeydev/go-blueprint#golang #project #structure
☕️
Telegram |
Website |
Discord