AzLearn

الوحدات

Modules

مفهوم ~15 دقيقة

الوحدات — Modules

الوحدات (Modules) هي نظام إدارة الاعتماديات في Go منذ الإصدار 1.11. قبلها كان هناك GOPATH الذي كان مصدر إحباط للكثيرين. الآن النظام بسيط ومنظم.

ما هي الوحدة؟

الوحدة = مجموعة من الحزم Go ذات العلاقة، تُدار كوحدة واحدة. كل وحدة لها ملف go.mod في الجذر.

إنشاء وحدة جديدة

main.go

مسار الوحدة — Module Path

مسار الوحدة يُحدد هوية مشروعك:

// مشروع على GitHub
go mod init github.com/username/myproject

// مشروع محلي بسيط
go mod init myproject

// مشروع شركة
go mod init company.com/team/service

إدارة الاعتماديات

main.go

ملف 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

الوحدات الخاصة — 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