GOPATH و GOROOT في Go: الدليل الكامل للمبتدئين والمحترفين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

GOPATH و GOROOT: ما هما ولماذا هما مهمان؟

\n\n

إذا كنت قد بدأت للتو في تعلم لغة Go، فستصادف عاجلاً أم آجلاً المصطلحين السحريين GOPATH و GOROOT. سؤال "ما هي القيم الصحيحة لـ GOPATH و GOROOT؟" هو من أكثر الأسئلة شيوعاً على Stack Overflow، وهذا ليس من قبيل الصدفة. المبتدئون يخلطون بينهما، ويضبطونهما بشكل خاطئ، ويواجهون أخطاء غريبة عند بناء المشاريع.

\n\n

في هذا المقال، سنشرح ببساطة ما هي هذه المتغيرات، وما هي القيم الافتراضية الصحيحة لها، وكيفية الانتقال إلى النهج الحديث باستخدام go modules. هيا بنا!

\n\n

ما هو GOROOT؟

\n\n

GOROOT هو المسار إلى المجلد الذي تم تثبيت مترجم Go فيه. داخل هذا المجلد توجد الحزم القياسية (مثل fmt و net و os وغيرها)، بالإضافة إلى الملفات التنفيذية go و gofmt والأدوات الأخرى.

\n\n

معظم المطورين لا يحتاجون إلى تعيين GOROOT يدوياً. إذا قمت بتثبيت Go عبر المثبت الرسمي أو مدير الحزم، فإن المترجم يعرف مكانه تلقائياً.

\n\n

كيف تتحقق من القيمة الحالية لـ GOROOT؟

\n

افتح الطرفية (Terminal) ونفّذ الأمر التالي:

\n
go env GOROOT
\n\n

مثال على الإخراج في لينكس:

\n
/usr/local/go
\n\n

في ويندوز (إذا كان التثبيت في المسار الافتراضي):

\n
C:\\Program Files\\Go
\n\n

متى تحتاج إلى تغيير GOROOT؟

\n
    \n
  • إذا قمت بنقل مجلد Go إلى مكان آخر.
  • \n
  • إذا كان لديك عدة إصدارات من Go وتريد التبديل بينها.
  • \n
  • إذا قمت ببناء Go من المصدر وقمت بتثبيته في دليل غير قياسي.
  • \n
\n\n

في جميع الحالات الأخرى، اترك GOROOT كما هو — دع Go يعتني به بنفسه.

\n\n

ما هو GOPATH؟

\n\n

أما GOPATH فهو متغير أكثر إثارة للاهتمام. تاريخياً، كانت Go تتطلب أن يكون كل الكود الخاص بك موجوداً في مساحة عمل واحدة. هذه المساحة كانت تُحدد عبر GOPATH.

\n\n

القيمة الافتراضية لـ GOPATH هي:

\n
    \n
  • لينكس/macOS: $HOME/go
  • \n
  • ويندوز: %USERPROFILE%\\go
  • \n
\n\n

داخل هذا المجلد، الهيكل القياسي هو:

\n
go/\n├── bin/        # الملفات التنفيذية المبنية\n├── pkg/        # ملفات الكائنات المبنية وذاكرة التخزين المؤقت\n└── src/        # الكود المصدري لمشاريعك\n    ├── github.com/\n    │   └── user/\n    │       └── myproject/\n    └── example.com/\n        └── myapp/
\n\n

كيف تتحقق من القيمة الحالية لـ GOPATH؟

\n
go env GOPATH
\n\n

ما هي القيم الصحيحة لـ GOPATH و GOROOT؟

\n\n

إليك الإجابة المختصرة على السؤال الرئيسي:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
المتغيرالقيمة الافتراضية (لينكس/macOS)القيمة الافتراضية (ويندوز)
GOROOT/usr/local/goC:\\Program Files\\Go
GOPATH$HOME/go%USERPROFILE%\\go
\n\n

هام: يجب أن يكون GOPATH و GOROOT مجلدين مختلفين. لا تجعلهما متطابقين أبداً!

\n\n

الأخطاء الشائعة وكيفية إصلاحها

\n\n

الخطأ 1: "GOPATH not set" أو "cannot find package"

\n

إذا كنت تستخدم النهج القديم (قبل الإصدارات 1.11-1.13)، فإن Go يبحث عن الحزم داخل $GOPATH/src. إذا وضعت مشروعك في مكان آخر، فلن يجده المترجم.

\n\n

الحل:

\n
    \n
  • إما انقل المشروع إلى $GOPATH/src.
  • \n
  • أو

المدونات

توصيات الكتب