فيما يلي بعض مزايا Go الرائعة التي لا تسمع عنها كثيرًا

في هذه المقالة ، أناقش لماذا يجب عليك منح فرصة Go وأين تبدأ.

Golang هي لغة برمجة ربما سمعت عنها كثيرًا خلال العامين الماضيين. على الرغم من أنه تم إنشاؤه مرة أخرى في عام 2009 ، إلا أنه بدأ يكتسب شعبية فقط في السنوات الأخيرة.

لا تتناول هذه المقالة نقاط البيع الرئيسية لـ Go التي تراها عادةً.

بدلاً من ذلك ، أود أن أقدم لك بعض الميزات الصغيرة ولكنها لا تزال مهمة والتي لا تعرفها إلا بعد أن قررت تجربة Go.

هذه ميزات رائعة لم يتم وضعها على السطح ، لكنها يمكن أن توفر عليك أسابيع أو شهور من العمل. يمكنهم أيضًا جعل تطوير البرامج أكثر إمتاعًا.

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

سنتطرق إلى مواضيع مثل:

  • GoDoc
  • تحليل الكود الثابت
  • إطار داخلي للاختبار والتنميط
  • كشف حالة السباق
  • منحنى التعلم
  • انعكاس
  • الرأي
  • حضاره

من فضلك ، لاحظ أن القائمة لا تتبع أي ترتيب معين. كما أنها عاقدة الرأي على أنها جحيم.

GoDoc

يتم أخذ التوثيق في الكود على محمل الجد في Go. هذا هو البساطة.

GoDoc عبارة عن أداة ثابتة لتحليل الكود تُنشئ صفحات توثيق جميلة مباشرة من شفرتك. الشيء الرائع في GoDoc هو أنه لا يستخدم أي لغات إضافية ، مثل JavaDoc أو PHPDoc أو JSDoc للتعليق على الإنشاءات في التعليمات البرمجية الخاصة بك. إنجليزي فقط.

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

كل ما يمكنك فعله هو إضافة // MyFunc transforms Foo into Barنوع قديم جيد من التعليقات التي ستنعكس في الوثائق أيضًا. يمكنك أيضًا إضافة أمثلة التعليمات البرمجية التي يمكن تشغيلها بالفعل عبر واجهة الويب أو محليًا.

GoDoc هو محرك التوثيق الوحيد لـ Go الذي يستخدمه المجتمع بأكمله. هذا يعني أن كل مكتبة أو تطبيق مكتوب في Go له نفس تنسيق الوثائق. على المدى الطويل ، يوفر لك الكثير من الوقت أثناء تصفح تلك المستندات.

هنا ، على سبيل المثال ، صفحة GoDoc لمشروع الحيوانات الأليفة الأخير: pullkee - GoDoc.

تحليل الكود الثابت

Go يعتمد بشدة على تحليل الكود الثابت. تتضمن الأمثلة godoc للتوثيق ، و gofmt لتنسيق الكود ، و golint لفحص نمط الكود ، وغيرها الكثير.

هناك الكثير منهم حتى أن هناك مشروعًا شاملاً من نوع كل شيء يسمى gometalinter لتكوينها جميعًا في أداة مساعدة واحدة.

يتم تنفيذ هذه الأدوات بشكل عام كتطبيقات سطر أوامر قائمة بذاتها وتتكامل بسهولة مع أي بيئة تشفير.

لا يعد تحليل الكود الثابت شيئًا جديدًا في البرمجة الحديثة ، لكن Go نوعًا ما يجلبه إلى المطلق. لا يمكنني المبالغة في تقدير مقدار الوقت الذي وفر لي. كما أنه يمنحك شعورًا بالأمان ، كما لو كان هناك من يغطي ظهرك.

من السهل جدًا إنشاء أجهزة التحليل الخاصة بك ، حيث أن Go لديها حزم مضمنة مخصصة للتحليل والعمل مع مصادر Go.

يمكنك معرفة المزيد من هذا الحديث: GothamGo Kickoff Meetup: Go Static Analysis Tools بواسطة Alan Donovan.

إطار داخلي للاختبار والتنميط

هل سبق لك أن حاولت اختيار إطار عمل للاختبار لمشروع جافا سكريبت بدأت من الصفر؟ إذا كان الأمر كذلك ، فقد تفهم هذا النضال من خلال هذا الشلل التحليلي. ربما تكون قد أدركت أيضًا أنك لم تستخدم 80٪ من الإطار الذي اخترته.

تتكرر المشكلة مرة أخرى بمجرد أن تحتاج إلى إجراء بعض التنميط الموثوق به.

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

إنها تنتج مخرجات صديقة للـ CI خارج الصندوق ، وعادة ما يكون الاستخدام سهلاً مثل التشغيل go test. بالطبع ، يدعم أيضًا الميزات المتقدمة مثل إجراء الاختبارات بشكل متوازٍ ، وتمييزها بالتخطي ، وغير ذلك الكثير.

كشف حالة السباق

ربما تعرف بالفعل عن Goroutines ، والتي تُستخدم في Go لتحقيق تنفيذ التعليمات البرمجية المتزامن. إذا لم تقم بذلك ، فإليك شرحًا موجزًا ​​حقًا.

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

ببساطة ، تحدث ظروف السباق عندما تنتهي عدة عمليات متزامنة بترتيب غير متوقع. قد يؤدي إلى عدد كبير من الأخطاء ، والتي يصعب ملاحقتها بشكل خاص. هل قضيت يومًا يومًا في تصحيح أخطاء اختبار تكامل نجح فقط في 80٪ من عمليات التنفيذ؟ ربما كانت حالة عرقية.

بعد كل ما قيل ، يتم التعامل مع البرمجة المتزامنة على محمل الجد في Go ، ولحسن الحظ ، لدينا أداة قوية جدًا لتعقب ظروف السباق هذه. تم دمجها بالكامل في سلسلة أدوات Go.

يمكنك قراءة المزيد حول هذا الموضوع ومعرفة كيفية استخدامه هنا: تقديم Go Race Detector - مدونة Go.

منحنى التعلم

يمكنك تعلم ميزات لغة ALL Go في إحدى الأمسيات. أعني ذلك. بالطبع ، هناك أيضًا مكتبة قياسية ، وأفضل الممارسات في مجالات مختلفة وأكثر تحديدًا. لكن ساعتين ستكونان وقتًا كافيًا تمامًا لتجعلك تكتب بثقة خادم HTTP بسيطًا أو تطبيق سطر أوامر.

يحتوي المشروع على وثائق رائعة ، وقد تم بالفعل تغطية معظم الموضوعات المتقدمة على مدونتهم: مدونة Go Programming Language Blog.

إن إحضار Go إلى فريقك أسهل بكثير من تقديم Java (والعائلة) أو Javascript أو Ruby أو Python أو حتى PHP. البيئة سهلة الإعداد ، والاستثمار الذي يحتاجه فريقك أقل بكثير قبل أن يتمكنوا من إكمال كود الإنتاج الأول.

انعكاس

انعكاس الكود هو في الأساس قدرة على التسلل تحت الغطاء والوصول إلى أنواع مختلفة من المعلومات الوصفية حول تراكيب لغتك ، مثل المتغيرات أو الوظائف.

بالنظر إلى أن Go هي لغة مكتوبة بشكل ثابت ، فإنها تتعرض لعدد من القيود المختلفة عندما يتعلق الأمر ببرمجة تجريدية مكتوبة بشكل فضفاض. مقارنة خاصة بلغات مثل Javascript أو Python.

علاوة على ذلك ، لا يطبق Go مفهومًا يسمى Generics مما يجعل العمل مع أنواع متعددة بطريقة مجردة أكثر صعوبة. ومع ذلك ، يعتقد الكثير من الناس أنها مفيدة بالفعل للغة بسبب مقدار التعقيد الذي يجلبه علم الوراثة. وأنا أتفق تماما.

وفقًا لفلسفة Go (وهو موضوع منفصل بحد ذاته) ، يجب أن تحاول جاهدًا عدم المبالغة في هندسة الحلول الخاصة بك. وهذا ينطبق أيضًا على البرمجة المكتوبة ديناميكيًا. التزم بالأنواع الثابتة قدر الإمكان ، واستخدم الواجهات عندما تعرف بالضبط نوع الأنواع التي تتعامل معها. تعد الواجهات قوية جدًا ومنتشرة في كل مكان في Go.

ومع ذلك ، لا تزال هناك حالات لا يمكنك فيها معرفة نوع البيانات التي تواجهها. مثال رائع هو JSON. تقوم بتحويل جميع أنواع البيانات ذهابًا وإيابًا في تطبيقاتك. السلاسل ، والمخازن المؤقتة ، وجميع أنواع الأرقام ، والبنى المتداخلة ، والمزيد.

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

التحذير المهم هو معرفة السعر الذي تدفعه مقابل استخدامه - واستخدامه فقط عندما لا توجد طريقة أبسط.

يمكنك قراءة المزيد عنها هنا: The Laws of Reflection - The Go Blog.

يمكنك أيضًا قراءة بعض التعليمات البرمجية الحقيقية من مصادر حزمة JSON هنا: src / encoding / json / encode.go - شفرة المصدر

الرأي

هل توجد مثل هذه الكلمة بالمناسبة؟

قادمًا من عالم جافا سكريبت ، كانت إحدى أكثر العمليات صعوبة التي واجهتها هي تحديد الاتفاقيات والأدوات التي أحتاج إلى استخدامها. كيف يمكنني تصميم الكود الخاص بي؟ ما مكتبة الاختبار التي يجب علي استخدامها؟ كيف يجب أن أتوجه نحو الهيكل؟ ما هي نماذج البرمجة والأساليب التي يجب أن أعتمد عليها؟

الذي جعلني في بعض الأحيان عالقا. كنت أفعل ذلك بدلاً من كتابة الكود وإرضاء المستخدمين.

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

هذا يجعل التحليل السحابي الشلل ينفجر على الفريق بأكمله ، كما يجعل من الصعب على الأفراد الاندماج مع بعضهم البعض.

حسنًا ، Go مختلف. لديك دليل أسلوب واحد فقط يتبعه الجميع. لديك إطار اختبار واحد فقط مدمج في سلسلة الأدوات الأساسية. لديك الكثير من الآراء القوية حول كيفية هيكلة الكود والحفاظ عليه. كيفية اختيار الأسماء. ما هي أنماط الهيكلة التي يجب اتباعها. كيفية عمل التزامن بشكل أفضل.

على الرغم من أن هذا قد يبدو مقيدًا للغاية ، إلا أنه يوفر الكثير من الوقت لك ولفريقك. أن تكون محدودًا إلى حد ما هو في الواقع أمر رائع عندما تقوم بالبرمجة. يمنحك طريقة أكثر وضوحًا للذهاب عند تصميم كود جديد ، ويجعل من السهل التفكير في الكود الحالي.

نتيجة لذلك ، تبدو معظم مشاريع Go متشابهة جدًا من حيث الكود.

حضاره

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

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

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

و Go هو استثمار رائع هنا. الركيزة الأساسية لثقافة Go هي الاحتفاظ برمز بسيط وواضح دون إنشاء العديد من التجريدات الزائدة ووضع قابلية الصيانة في المقدمة. يعد قضاء معظم الوقت في العمل فعليًا على قاعدة البيانات جزءًا من الثقافة ، بدلاً من العبث بالأدوات والبيئة. أو الاختيار بين أشكال مختلفة من هؤلاء.

يدور Go أيضًا حول "يجب أن يكون هناك طريقة واحدة فقط لعمل شيء ما."

ملاحظة جانبية صغيرة. من الصحيح أيضًا أن Go عادة ما تعترض طريقك عندما تحتاج إلى بناء تجريدات معقدة نسبيًا. حسنًا ، أود أن أقول أن هذه هي المقايضة لبساطتها.

إذا كنت حقًا بحاجة إلى كتابة الكثير من التعليمات البرمجية المجردة مع العلاقات المعقدة ، فمن الأفضل لك استخدام لغات مثل Java أو Python. ومع ذلك ، حتى عندما لا يكون الأمر واضحًا ، نادرًا ما يحدث ذلك.

استخدم دائمًا أفضل أداة للوظيفة!

استنتاج

ربما سمعت عن Go من قبل. أو ربما يكون شيئًا ظل بعيدًا عن رادارك لفترة من الوقت. في كلتا الحالتين ، هناك احتمالات ، يمكن أن يكون Go خيارًا لائقًا جدًا لك أو لفريقك عند بدء مشروع جديد أو تحسين المشروع الحالي.

هذه ليست قائمة كاملة بكل الأشياء المدهشة حول Go. فقط منها مقومة بأقل من قيمتها .

من فضلك ، قم بتجربة Go try مع A Tour of Go وهو مكان رائع للبدء.

إذا كنت ترغب في معرفة المزيد عن مزايا Go ، يمكنك التحقق من هذه الروابط:

  • لماذا يجب أن تتعلم Go؟ - كيفال باتل - متوسط
  • Farewell Node.js - TJ Holowaychuk - متوسط

شارك ملاحظاتك في التعليقات!

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

ابحث دائمًا عن أفضل الأدوات لمهنتك!

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

تحقق من جيثب الخاص بي وتابعني على تويتر!