GOPATH و GOROOT: ما هما ولماذا هما مهمان؟
\n\nإذا كنت قد بدأت للتو في تعلم لغة Go، فستصادف عاجلاً أم آجلاً المصطلحين السحريين GOPATH و GOROOT. سؤال "ما هي القيم الصحيحة لـ GOPATH و GOROOT؟" هو من أكثر الأسئلة شيوعاً على Stack Overflow، وهذا ليس من قبيل الصدفة. المبتدئون يخلطون بينهما، ويضبطونهما بشكل خاطئ، ويواجهون أخطاء غريبة عند بناء المشاريع.
في هذا المقال، سنشرح ببساطة ما هي هذه المتغيرات، وما هي القيم الافتراضية الصحيحة لها، وكيفية الانتقال إلى النهج الحديث باستخدام go modules. هيا بنا!
ما هو GOROOT؟
\n\nGOROOT هو المسار إلى المجلد الذي تم تثبيت مترجم Go فيه. داخل هذا المجلد توجد الحزم القياسية (مثل fmt و net و os وغيرها)، بالإضافة إلى الملفات التنفيذية go و gofmt والأدوات الأخرى.
معظم المطورين لا يحتاجون إلى تعيين GOROOT يدوياً. إذا قمت بتثبيت Go عبر المثبت الرسمي أو مدير الحزم، فإن المترجم يعرف مكانه تلقائياً.
\n\nكيف تتحقق من القيمة الحالية لـ GOROOT؟
\nافتح الطرفية (Terminal) ونفّذ الأمر التالي:
\ngo env GOROOT\n\nمثال على الإخراج في لينكس:
\n/usr/local/go\n\nفي ويندوز (إذا كان التثبيت في المسار الافتراضي):
\nC:\\Program Files\\Go\n\nمتى تحتاج إلى تغيير GOROOT؟
\n- \n
- إذا قمت بنقل مجلد Go إلى مكان آخر. \n
- إذا كان لديك عدة إصدارات من Go وتريد التبديل بينها. \n
- إذا قمت ببناء Go من المصدر وقمت بتثبيته في دليل غير قياسي. \n
في جميع الحالات الأخرى، اترك GOROOT كما هو — دع Go يعتني به بنفسه.
\n\nما هو GOPATH؟
\n\nأما GOPATH فهو متغير أكثر إثارة للاهتمام. تاريخياً، كانت Go تتطلب أن يكون كل الكود الخاص بك موجوداً في مساحة عمل واحدة. هذه المساحة كانت تُحدد عبر GOPATH.
القيمة الافتراضية لـ GOPATH هي:
- \n
- لينكس/macOS:
$HOME/go\n - ويندوز:
%USERPROFILE%\\go\n
داخل هذا المجلد، الهيكل القياسي هو:
\ngo/\n├── bin/ # الملفات التنفيذية المبنية\n├── pkg/ # ملفات الكائنات المبنية وذاكرة التخزين المؤقت\n└── src/ # الكود المصدري لمشاريعك\n ├── github.com/\n │ └── user/\n │ └── myproject/\n └── example.com/\n └── myapp/\n\nكيف تتحقق من القيمة الحالية لـ GOPATH؟
\ngo env GOPATH\n\nما هي القيم الصحيحة لـ GOPATH و GOROOT؟
\n\nإليك الإجابة المختصرة على السؤال الرئيسي:
\n\n| المتغير | \nالقيمة الافتراضية (لينكس/macOS) | \nالقيمة الافتراضية (ويندوز) | \n
|---|---|---|
GOROOT | \n /usr/local/go | \n C:\\Program Files\\Go | \n
GOPATH | \n $HOME/go | \n %USERPROFILE%\\go | \n
هام: يجب أن يكون GOPATH و GOROOT مجلدين مختلفين. لا تجعلهما متطابقين أبداً!
الأخطاء الشائعة وكيفية إصلاحها
\n\nالخطأ 1: "GOPATH not set" أو "cannot find package"
\nإذا كنت تستخدم النهج القديم (قبل الإصدارات 1.11-1.13)، فإن Go يبحث عن الحزم داخل $GOPATH/src. إذا وضعت مشروعك في مكان آخر، فلن يجده المترجم.
الحل:
\n- \n
- إما انقل المشروع إلى
$GOPATH/src. \n - أو