كيفية التغلب على خطأ "declared and not used" في Go: دليل كامل

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

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

ابدأ الدورة

مقدمة: "آه، هذا الخطأ مرة أخرى!"



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



./main.go:10:2: x declared and not used


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



لكن لا تتعجل في نتف شعرك! في هذه المقالة، سنشرح 5 طرق مثبتة للتغلب على هذا الخطأ. ستتعلم كيفية التعامل مع المتغيرات بشكل صحيح، وما هي الأدوات التي ستساعدك على تجنب المشكلة، وكيفية تحويل هذا "العائق المزعج" إلى عادة مفيدة.



هيا بنا!



لماذا Go صارمة إلى هذا الحد؟



قبل محاربة الخطأ، دعنا نفهم طبيعته. على عكس Python أو JavaScript، حيث المتغير غير المستخدم هو مجرد تحذير، في Go هو خطأ في التجميع. لماذا؟



  • نقاء الكود. تم إنشاء Go كلغة للتطوير الصناعي. المتغيرات غير المستخدمة هي نفايات تعيق قراءة الكود وصيانته.
  • منع الأخطاء البرمجية. غالبًا ما يكون المتغير "المعلن ولكن غير المستخدم" علامة على أنك نسيت القيام بشيء ما. المُجمّع يلتقط هذه اللحظات.
  • تجميع سريع. كلما قلت النفايات، كان البناء أسرع.


الآن بعد أن عرفنا العدو، دعنا نرى كيف نهزمه.



الطريقة 1: المعرف الفارغ Blank Identifier — شريان النجاة الخاص بك



الطريقة الأبسط والأكثر استخدامًا هي المعرف الفارغ blank identifier — رمز الشرطة السفلية _. يخبر المُجمّع: "أنا أعلم أن هذا المتغير موجود، لكنني لا أحتاج منه شيئًا، فقط تجاهله".



مثال: تستدعي دالة تُرجع عدة قيم، لكنك تحتاج إلى قيمة واحدة فقط.



package main

import "fmt"

func getData() (int, string) { return 42, "الإجابة السرية"}

func main() { // نحتاج فقط إلى الرقم، نتجاهل السلسلة النصية value, _ := getData() fmt.Println("القيمة:", value)}


هنا، _ يستقبل السلسلة النصية لكنه لا يستخدمها. لا يوجد خطأ. يعمل!



مهم: _ ليس "سلة مهملات". إنه متغير كامل لا يمكن قراءته. لا يمكنك كتابة fmt.Println(_) — فهذا أيضًا خطأ في التجميع.



متى تستخدم: عندما تعرف يقينًا أنك لا تحتاج القيمة المُعادة. على سبيل المثال، عند استدعاء دوال تُرجع خطأ، ولكنك متأكد من عدم حدوثه (على الرغم من أن هذه ممارسة مثيرة للجدل).



الطريقة 2: فقط استخدم المتغير (الأكثر وضوحًا)



يبدو هذا مبتذلاً، لكننا غالبًا ما نعلن عن متغير وننسى استخدامه. فقط أضف سطرًا "يستهلكه".



package main

import "fmt"

func main() { name := "فاسيا" // خطأ: name declared and not used

// الإصلاح: fmt.Println("مرحبًا،", name)}


لكن ماذا لو كنت بحاجة إلى المتغير فقط لحساب وسيط، ولا تريد طباعته؟ استخدم _:



package main

func main() { result := calculateSomething() _ = result // فقط "نستخدم" المتغير، دون فعل أي شيء}

func calculateSomething() int { return 100}


هذه طريقة قانونية. لكنها تبدو كحل مؤقت. من الأفضل إعادة التفكير في المنطق.



الطريقة 3: التصحيح باستخدام أدوات التحليل Linters



أفضل دفاع هو الهجوم. بدلاً من إصلاح الأخطاء بعد التجميع، استخدم أدوات التحليل linters

المدونات

توصيات الكتب