استيراد الحزم المحلية في Go: دليل خطوة بخطوة مع كود

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

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

ابدأ الدورة

لماذا يثير استيراد الحزم المحلية في Go الكثير من الأسئلة؟

\n\n

إذا كنت قد حاولت يومًا تنظيم كود Go في ملفات ومجلدات منفصلة، فمن المحتمل أنك واجهت خطأ مثل could not import "myproject/utils". هذه واحدة من أكثر المشكلات شيوعًا بين مطوري Go المبتدئين. على Stack Overflow، حصد سؤال "How to import local packages in go?" آلاف المشاهدات - وليس بدون سبب.

\n\n

على عكس Python، حيث يكفي وضع ملف بجانب آخر وكتابة import mymodule، يتطلب Go هيكلًا واضحًا وإعدادًا صحيحًا للوحدات. ولكن بمجرد إتقان هذه الآلية، ستدرك مدى أناقتها. دعنا نفهمها مرة واحدة وإلى الأبد.

\n\n

نظرية مختصرة: كيف يفهم Go الحزم

\n\n

قبل كتابة الكود، تذكر ثلاثة مبادئ أساسية:

\n\n
    \n
  • Go هي لغة ذات هيكل وحدات صارم. كل دليل هو حزمة واحدة (package).
  • \n
  • اسم الحزمة ليس ملزمًا بأن يتطابق مع اسم المجلد، لكن يُوصى بشدة بذلك لتحسين readability.
  • \n
  • استيراد الحزم المحلية منذ عام 2019 يتم عبر الوحدات (Go modules). انسَ GOPATH - استخدم go mod.
  • \n
\n\n

الآن ننتقل إلى التطبيق العملي.

\n\n

الخطوة 1: إنشاء مشروع مع وحدة

\n\n

افتح terminal وأنشئ مجلدًا جديدًا لمشروعك:

\n\n
mkdir go-local-imports\ncd go-local-imports\n
\n\n

الآن، قم بتهيئة الوحدة. يمكن أن يكون اسم الوحدة أي شيء، لكن من المنطقي استخدام مسار فريد (مثل رابط المستودع):

\n\n
go mod init github.com/your-username/go-local-imports\n
\n\n

بعد هذا الأمر، سيظهر ملف go.mod في المجلد. هذا الملف سيدير التبعيات - المحلية والخارجية على حد سواء.

\n\n

الخطوة 2: إنشاء حزمة محلية

\n\n

لننشئ مجلد utils داخل المشروع. بداخله، ملف math.go:

\n\n
mkdir utils\ncd utils\ntouch math.go\n
\n\n

افتح utils/math.go واكتب:

\n\n
package utils\n\n// Add ترجع مجموع عددين صحيحين\nfunc Add(a, b int) int {\n    return a + b\n}\n
\n\n

لاحظ: الدالة Add مكتوبة بحرف كبير. في Go، هذا يعني أنها مُصدرة (عامة). إذا كتبت add - فستكون خاصة وغير متاحة من الحزم الأخرى.

\n\n

الخطوة 3: استيراد واستخدام الحزمة المحلية

\n\n

عد إلى المجلد الجذر للمشروع وأنشئ main.go:

\n\n
cd ..\ntouch main.go\n
\n\n

محتوى main.go:

\n\n
package main\n\nimport (\n    "fmt"\n    "github.com/your-username/go-local-imports/utils"\n)\n\nfunc main() {\n    result := utils.Add(3, 5)\n    fmt.Println("المجموع:", result)\n}\n
\n\n

الآن قم بتشغيل البرنامج:

\n\n
go run main.go\n
\n\n

يجب أن ترى:

\n\n
المجموع: 8\n
\n\n

كل شيء يعمل! ولكن إذا حصلت على خطأ - اقرأ القسم التالي.

\n\n

الأخطاء النموذجية وحلولها

\n\n

الخطأ 1: "package is not in GOROOT"

\n\n

ترى شيئًا مثل:

\n
package myproject/utils is not in GOROOT (/usr/local/go/src/myproject/utils)
\n\n

السبب: تحاول استيراد حزمة بدون وحدة. Go يبحث عنها في المكتبة القياسية، وليس في مشروعك.

\n

الحل: تأكد من وجود go.mod في جذر المشروع. إذا لم يكن موجودًا، نفذ go mod init اسم-الوحدة.

\n\n

الخطأ 2: "undefined: utils.Add"

\n\n

السبب: الدالة مكتوبة بحرف صغير (خاصة)، أو أنك استوردت الحزمة ولكنك لا تستخدم اسمها.

\n

الحل: تحقق من أن جميع الدوال المطلوبة مُصدرة (بحرف كبير)، وأنك تشير إليها باستخدام اسم الحزمة.

المدونات

توصيات الكتب