كيفية حذف الحزم المثبتة عبر go get: دليل شامل

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

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

ابدأ الدورة

"لقد قمت بتثبيت حزمة، لكن لا أستطيع حذفها!" — قصة مألوفة؟

\n\n

هل بدأت للتو في تعلم لغة Go، ووجدت مكتبة رائعة على GitHub، وكتبت الأمر go get github.com/example/package — ونجح كل شيء! ولكن مع مرور الوقت، يتغير مشروعك وتدرك أن هذه الحزمة لم تعد ضرورية. تبحث عن أمر go remove أو go uninstall، ولكن... ببساطة لا يوجد.

\n\n

مرحبًا بك في عالم Go، حيث حذف الحزم ليس مجرد زر، بل مغامرة صغيرة. في هذا المقال، سنفهم أين تذهب الحزم بعد go get، وكيف "نطردها" بشكل صحيح، ولماذا صُمم Go بهذه الطريقة. تلميح: بعد القراءة، ستتوقف عن الخوف من الفوضى في النظام وستتعلم كيفية الحفاظ على مشاريعك نظيفة.

\n\n

كيف يعمل go get: شرح مختصر

\n\n

قبل أن نحذف، دعنا نفهم أين تذهب الحزمة بالضبط. في Go (قبل الإصدار 1.16، ولكن هذه المعرفة لا تزال مفيدة)، كان الأمر go get يقوم بتنزيل الكود المصدري للحزمة في مجلدين:

\n\n
    \n
  • $GOPATH/src — الكود المصدري للحزمة (كما لو كنت قد استنسخت المستودع)؛
  • \n
  • $GOPATH/pkg — الملفات الكائنية المترجمة (.a).
  • \n
\n\n

إذا كنت تستخدم Go modules (وهو الوضع الافتراضي منذ الإصدار 1.16)، فإن go get يعمل بشكل مختلف: فهو يضيف التبعية إلى ملف go.mod ويقوم بتنزيل الوحدة في الكاش ($GOPATH/pkg/mod).

\n\n

المشكلة هي أنه لا يوجد أمر مدمج في Go لحذف حزمة. يعتقد مطورو اللغة أنه إذا لم تعد الحزمة ضرورية لك — فقط لا تستوردها في الكود. يبدو هذا منطقيًا، ولكن ماذا لو كنت تريد تحرير مساحة أو ترتيب الأمور؟

\n\n

الطريقة الأولى: go clean -i (للمشاريع القديمة بدون وحدات)

\n\n

في السابق (قبل عصر الوحدات)، كان هناك أمر go clean -i. كان يقوم بحذف الملفات المترجمة للحزمة من $GOPATH/pkg. لكنه لم يمس الكود المصدري. أي أنك كنت تحذف فقط القطع الأثرية الثنائية، لكن الكود نفسه كان يبقى في src.

\n\n
# حذف الملفات المترجمة للحزمة\ngo clean -i github.com/example/package\n\n# الكود المصدري لا يزال هنا:\nls $GOPATH/src/github.com/example/package
\n\n

عمليًا، كان هذا غير مريح. لذلك في الإصدارات الحديثة من Go (بدءًا من 1.12)، تم إعلان go clean -i كأمر قديم. إذا كتبت go clean -i الآن، فإن Go سيتجاهل العلم -i وينفذ go clean العادي (حذف الملفات الكائنية في المشروع الحالي).

\n\n

الطريقة الثانية: الحذف اليدوي من GOPATH (للمحترفين)

\n\n

إذا كنت لا تزال تعمل بدون وحدات (أو تريد فقط تنظيف التراكمات القديمة)، فسيتعين عليك التصرف يدويًا. إليك الوصفة الكاملة:

\n\n
    \n
  1. ابحث عن مكان $GOPATH الخاص بك:
  2. \n
\n\n
go env GOPATH
\n\n

عادةً ما يكون /home/user/go أو C:\\Users\\user\\go.

\n\n
    \n
  1. احذف الكود المصدري:
  2. \n
\n\n
rm -rf $GOPATH/src/github.com/example/package
\n\n
    \n
  1. احذف الملفات المترجمة (إذا كانت موجودة):
  2. \n
\n\n
rm -rf $GOPATH/pkg/linux_amd64/github.com/example/package.a
\n\n
\n

هام: المسار إلى ملف .a يعتمد على نظام التشغيل والبنية الخاصة بك. linux_amd64 هو مثال نموذجي. يمكنك معرفة المسار الدقيق عبر go list -m، ولكن الأسهل هو حذف مجلد الحزمة بالكامل في pkg.

\n
\n\n

هذه الطريقة تعمل، لكنها غير نظيفة. أنت تخاطر بحذف شيء مهم عن طريق الخطأ. بالإضافة إلى ذلك، إذا كانت الحزمة مستخدمة في مشاريع أخرى — فستتوقف عن العمل.

\n\n

الطريقة الثالثة: النهج الحديث — go mod tidy

\n\n

إذا كنت تستخدم Go modules (ويجب عليك استخدامها إذا بدأت التعلم في 2024)، فكل شيء أكثر أناقة. عندما تتوقف عن استيراد حزمة في الكود الخاص بك، فإنها تتوقف تلقائيًا عن الظهور في ملف go.mod. ولكن ماذا عن الملفات التي تم تنزيلها في الكاش؟ هنا يأتي دور الأمر go mod tidy.

\n\n
# تنظيف التبعيات غير المستخدمة\ngo mod tidy
\n\n

يقوم هذا الأمر بما يلي:

\n
    \n
  • إزالة التبعيات غير المستخدمة من ملف go.mod.
  • \n
  • حذف الوحدات غير الضرورية من الكاش المحلي ($GOPATH/pkg/mod).
  • \n
  • تحديث ملف go.sum ليعكس التغييرات.
  • \n
\n\n

هذه هي الطريقة الموصى بها في Go الحديث. لا حاجة للحذف اليدوي، ولا حاجة لأوامر خاصة. فقط قم بتشغيل go mod tidy بانتظام في مشروعك.

\n\n

الخلاصة: ماذا تختار؟

\n\n

إليك ملخص سريع للطرق المذكورة:

\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
الطريقةمتى تستخدمهاالمزاياالعيوب
go clean -iمشاريع قديمة جدًا (قبل Go 1.12)بسيطة وسريعةلا تحذف الكود المصدري، قديمة
الحذف اليدويعند العمل بدون وحداتتحكم كاملخطيرة، قد تكسر مشاريع أخرى
go mod tidyالمشاريع الحديثة (مع الوحدات)آمنة، تلقائية، موصى بهاتتطلب استخدام الوحدات
\n\n

في النهاية، تذكر أن Go صُممت لتكون لغة بسيطة وفعالة. إذا كنت تستخدم الوحدات، فأنت في الجانب الآمن. فقط حافظ على نظافة مشروعك باستخدام go mod tidy، وستتجنب معظم المشاكل المتعلقة بإدارة الحزم.

\n\n

هل لديك أسئلة أو تجارب مع حذف الحزم في Go؟ شاركنا في التعليقات!

المدونات

توصيات الكتب