بناء الملف التنفيذي و تنسيق الكود
كانت الأداة التي رأيتها في جولة الفصل الأول ملف واحد يمكن نسخه و تشغيله. أما go run فينفذ كودك ثم ينتهي من دون أن يترك ملف يمكن إرساله.
هذا مناسب أثناء تجربة الكود. لكنك تحتاج إلى ملف يبقى حين تريد تسليم الأداة نفسها.
ملف يبقى
go buildبعد هذا الأمر يظهر في المجلد ملف جديد اسمه jobrunner. شغله مباشرة:
./jobrunnerتحصل على المخرجات نفسها، لكن هذه المرة من ملف موجود، لا من أمر يترجم و ينسى.
الاسم jobrunner لم نختره في سطر الأوامر. بجانب main.go في مشروعك ملف اسمه go.mod و هو بطاقة تعريف المشروع عند Go. في سطره الأول اسم الوحدة (Module):
module jobrunnerيأخذ go build اسم الملف الناتج من آخر جزء في هذا الاسم. لو كتبنا يوما module github.com/you/jobrunner، لبقي اسم الملف jobrunner وحده.
و هذا الملف يكتفي بذاته. يمكنك نسخه إلى جهاز آخر من نوع النظام و المعالج نفسيهما فيعمل دون تثبيت Go أو بيئة تشغيل بجانبه. هذا ما قصدناه في جولة الفصل الأول بعبارة "ملف تنفيذي واحد".
شكل واحد للكود
الملف التنفيذي يخرج من كود مصدري يقرأه غيرك و يعدله. و هنا يظهر سؤال يشغل الفرق في لغات كثيرة: كم مسافة للإزاحة و أين يوضع القوس و هل نترك فراغ بعد الفاصلة.
في Go لا يناقش هذا السؤال لأن للغة أداة تحسمه:
go fmtيعيد go fmt كتابة ملفاتك بالتنسيق القياسي. لا إعدادات تضبطها و لا خيارات تفاضل بينها.
خذ هذا السطر:
fmt.Println( "a tiny CLI for running jobs" )بعد go fmt يصير:
fmt.Println("a tiny CLI for running jobs")المهم أن ما يفعله البرنامج لم يتغير. go fmt يمس الشكل وحده لذلك تشغله متى شئت دون أن تخشى على السلوك. أغلب المحررات تشغله تلقائيا عند الحفظ.
تظهر الفائدة حين تفتح مشروعا بلغة Go لم تكتبه. ستجد فيه التنسيق نفسه الذي اعتدت عليه و لن تحتاج إلى تعلم أسلوب جديد مع كل فريق.
يبقى أمر أخير
هناك go install و هو يبني البرنامج ثم يضعه في مجلد الأدوات الخاص بـ Go. إذا كان هذا المجلد ضمن PATH عندك، استدعيت jobrunner من أي مكان بالاسم وحده، كأي أداة أخرى مثبتة عندك.
نتركه إلى نهاية الدورة، حين يصبح لدينا ما يستحق التثبيت.
التحدي
في المحرر، ملف main.go يعمل لكن تنسيقه غير قياسي: مسافات زائدة و إزاحة غير منتظمة.
في الطرفية، نفذ ما يلي:
go fmtلضبط تنسيق الملف. سيطبع الأمرmain.goو هي طريقته في إخبارك بالملفات التي عدلها. لاحظ كيف تغير شكل الملف في المحرر.go buildلإنتاج الملف التنفيذي../jobrunnerللتأكد من أنه يطبع:
jobrunner v0.1
a tiny CLI for running jobsبعدها اضغط على زر تشغيل و تحقق لإكمال الدرس.
الخلاصة
تغطي أوامر Go الثلاثة دورة العمل التي نحتاجها الآن. نستخدم go run للتجربة السريعة و go build لإنتاج ملف تنفيذي و go fmt لتنسيق الكود بالشكل القياسي. الأدوات قليلة عمدا مثل اللغة نفسها.
يطبع jobrunner الآن سطرين ثابتين مكتوبين داخل main. ماذا لو أردنا تغيير الإصدار أو عدد المحاولات دون البحث عن كل موضع كتبنا فيه القيمة؟