الوحدات
Modules
مفهوم
~15 دقيقة
الوحدات — Modules
الوحدات (Modules) هي نظام إدارة الاعتماديات في Go منذ الإصدار 1.11. قبلها كان هناك GOPATH الذي كان مصدر إحباط للكثيرين. الآن النظام بسيط ومنظم.
ما هي الوحدة؟
الوحدة = مجموعة من الحزم Go ذات العلاقة، تُدار كوحدة واحدة. كل وحدة لها ملف go.mod في الجذر.
إنشاء وحدة جديدة
main.go
Output:
مسار الوحدة — Module Path
مسار الوحدة يُحدد هوية مشروعك:
// مشروع على GitHub
go mod init github.com/username/myproject
// مشروع محلي بسيط
go mod init myproject
// مشروع شركة
go mod init company.com/team/service
إدارة الاعتماديات
main.go
Output:
ملف go.sum
go.sum يحتوي هاشات التحقق لكل اعتمادية — يضمن أن نفس الكود يُستخدم في كل مكان:
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKFbGRn7nbIqu9HhEDnDfBij0=
لا تُعدّل go.sum يدوياً! دع أدوات Go تُديره.
الإصدار الدلالي — Semantic Versioning
Go يتبع SemVer:
main.go
Output:
الوحدات الخاصة — Private Modules
# لوحدات خاصة (ليست على GitHub العام)
export GOPRIVATE=company.com/*,github.com/private-org/*
# أو في go env
go env -w GOPRIVATE=company.com/*
البنية النموذجية للمشروع
myproject/
├── go.mod # تعريف الوحدة
├── go.sum # هاشات التحقق
├── main.go # نقطة الدخول
├── internal/ # حزم داخلية (غير قابلة للاستيراد)
│ ├── auth/
│ └── database/
├── pkg/ # حزم عامة (قابلة للاستيراد)
│ └── utils/
├── cmd/ # تطبيقات متعددة
│ ├── server/
│ └── cli/
└── vendor/ # اعتماديات محلية (اختياري)
تحدي — Challenge
اطبع ملخص أوامر الوحدات الأساسية