Go وREPL: كيف أن التصحيح بدون وحدة تحكم لم يدمر مسيرتي المهنية

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

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

ابدأ الدورة

مقدمة: "أين وحدتي التحكم؟"

\n\n

هل سبق لك أن أمسكت بنفسك تفكر: "أتمنى لو أستطيع تشغيل سطر واحد من الكود بسرعة، اختبار فرضية، التجربة مع بناء الجملة - ثم مواصلة الكتابة"؟ إذا أتيت إلى Go من Python أو JavaScript أو Ruby، فإن هذا السؤال يصبح حاداً بشكل خاص. هناك REPL (حلقة القراءة-التقييم-الطباعة) - بيئة تفاعلية حيث يتم تنفيذ الكود سطراً بسطر. تكتب 2 + 2 - وترى على الفور 4. رائع!

\n\n

ولكنك تفتح Go، تكتب go run main.go، تقوم بالتجميع... وتدرك: لا يوجد سحر. أم يوجد؟ سؤال "هل يوفر Go REPL؟" على Stack Overflow حصد آلاف المشاهدات وعشرات التعليقات. الناس مرتبكون، محبطون، وأحياناً يتخلون عن اللغة.

\n\n

في هذه المقالة، سأشرح لماذا لا يوجد REPL مدمج في Go، وما هي الأدوات التي يمكن أن تحل محله، والأهم من ذلك - كيف تتجنب ارتكاب الأخطاء النموذجية التي تحول تعلم Go إلى صداع. هيا بنا!

\n\n

لماذا لا يوجد REPL في Go؟ (وهذه ليست مشكلة، بل ميزة)

\n\n

الخطأ الأول للمبتدئ هو اعتبار غياب REPL عيباً في اللغة. في الواقع، هذا قرار معماري. Go هي لغة مجمعة، ذات أنواع صارمة. REPL يفترض التفسير أو التجميع في الوقت المناسب (JIT)، وهو ما يتعارض مع فلسفة Go: "البساطة، السرعة، القدرة على التنبؤ".

\n\n

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

\n
    \n
  • سرعة تنفيذ فائقة (لا مفاجآت في الإنتاج)؛
  • \n
  • فحصاً صارماً للأنواع في مرحلة التجميع (أخطاء أقل في وقت التشغيل)؛
  • \n
  • سحراً أقل (تعرف بالضبط ما يفعله كودك).
  • \n
\n\n

ولكن ماذا عن التجارب السريعة؟ هل يجب عليك في كل مرة إنشاء ملف main.go؟ المفسد: لا.

\n\n

أهم 3 أخطاء عند العمل بدون REPL (وكيفية تجنبها)

\n\n

الخطأ رقم 1: "سأكتب كل شيء في ملف واحد وأشغله عبر go run"

\n\n

هذا هو المفهوم الخاطئ الأكثر شيوعاً. يقوم المبتدئون بإنشاء ملف main.go عملاق واحد، ويضعون فيه كل الكود، ويختبرونه عبر go run، ثم يتفاجأون لماذا يشتكي المترجم من المتغيرات أو الاستيرادات غير المستخدمة.

\n\n

كيف تتجنبه: استخدم Go Playground (play.golang.org). هذه أداة ويب رسمية تعمل مثل REPL مصغر. تكتب الكود، تضغط "Run" - وترى النتيجة. نعم، هذا ليس إدخالاً سطراً بسطر، لكنه مثالي لفحص بناء الجملة أو الخوارزميات أو أجزاء صغيرة من الكود.

\n\n

مثال:

\n
package main\n\nimport "fmt"\n\nfunc main() {\n    message := "Hello, Go REPL!"\n    fmt.Println(message)\n}
\n

شغّلته - حصلت على المخرجات. سريع، نظيف، بدون ملفات إضافية.

\n\n

الخطأ رقم 2: "REPL في Go هو مجرد go run بدون حفظ"

\n\n

يحاول البعض استخدام go run كـ REPL: يكتبون الكود مباشرة في الطرفية عبر echo أو cat. هذا يعمل فقط مع الأمثلة التافهة، ولكن بمجرد ظهور الاستيرادات أو الحزم أو أخطاء التجميع - ينهار كل شيء.

\n\n

كيف تتجنبه: قم بتثبيت gore - وهو REPL شبه كامل لـ Go. يسمح لك بتنفيذ التعبيرات، وإعلان المتغيرات، وحتى استيراد الحزم في الوضع التفاعلي.

\n\n

التثبيت:

\n
go install github.com/motemen/gore@latest
\n

التشغيل:

\n
gore
\n

مثال على العمل:

\n
gore> 2 + 2\n4\ngore> import "fmt"\ngore> fmt.Println("Hello from gore!")\nHello from gore!
\n

ليس مثالياً، لكنه قريب جداً من REPL الكلاسيكي. الشيء الرئيسي - لا تنسَ أن هذه أداة خارجية، وهي لا تدعم جميع ميزات اللغة (على سبيل المثال، قد تتصرف goroutines بشكل غير متوقع في الوضع التفاعلي).

\n\n

الخطأ رقم 3: "سأكتب الاختبارات في main() وأشغلها"

المدونات

توصيات الكتب