الذهاب اللغة: اختيار ORM

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

تطبيق


تعد لغة النظام هذه مفيدة لمعظم مهام الشبكة ، وأي خدمات ميكروية وخدمات ماكرو ، وخدمات ويب ، وكذلك لأدوات النظام - فليس من دون سبب أن العديد من خبراء DevOps يحبونها. تجد Go استخدامها في Machine Learning ، وحتى بعض المطورين يكتبون مواقع الويب معه. في ممارستنا ، تحولنا إلى Go عندما قمنا بتطوير CRM منفصلة ومنتجات البرامج للاستخدام الداخلي ، على سبيل المثال ، لشركات التأمين. يحتوي مستودع Go language القياسي أيضًا على حزمة لتطوير المحمول ، لا تزال هذه الحزمة مدعومة ، على الرغم من وجود أدوات أكثر مناسبة لهذا الغرض.

الذهاب: التنمية والاعتراف


في Google ، بدأ تطوير لغة Go في عام 2007. قبل ذلك ، استخدمت الشركة Java و Python و C ++ ، ومع ذلك ، كان لديهم عيوب معينة (على وجه الخصوص ، ارتفاع استهلاك الذاكرة) أو استخدام محدود. ثم بدأت جوجل في تطوير لغة جديدة لتلبية احتياجاتهم.

ما هي متطلبات اللغة:

  • ملف تنفيذي واحد (بدون تبعيات)
  • تجميع سريع
  • وقت تشغيل سريع (على الأقل على قدم المساواة مع Java و C ++)
  • جامع القمامة يقلل من تسرب الموارد
  • الأمثل لأنظمة متعددة المعالجات
  • كتابة ثابتة
  • بساطتها
  • خفة النحوية
  • تعددية الأجسام (حتمية ، وظيفية ، موجهة للكائنات)

بالنسبة لأولئك الذين لا يعملون مع Go ، اذكر باختصار تاريخ إنشائها. بدأت Google في التفكير في مواصفات اللغة في عام 2007. تم إطلاق الإصدار 1.0 في عام 2012 ، وفي عام 2015 تم إصدار الإصدار 1.5 ، بالفعل بدون سطر واحد من كود C ++. من تلك اللحظة فصاعدًا ، تجمع اللغة نفسها ، مما سمح لنا بتسريع عملية تطوير المهام الفردية أثناء التنقل.

يبلغ متوسط ​​العمر التقديري للغة الجديدة في المجتمع حوالي 10 سنوات ، لكن Go تعد بالفعل واحدة من أكثر اللغات شعبية. في يونيو 2019 ، قفز Go في المرتبة 15 من حيث الشعبية في العالم ، وفقًا لمؤشر TIOBE ، مضيفًا ثلاثة مراكز في السنة. من بين أسباب نجاحها ما يلي:

  • مكتبة قياسية قوية
  • ضبط قياسي بارد
  • يتم عرض معظم الوظائف الضرورية في "المربع" ، ويتم إعطاء المكتبات مفتوحة المصدر
  • مجتمع ودود للغاية

على سبيل المثال ، يتم تضمين الحزم التالية في المكتبة القياسية (القائمة غير كاملة):



الرسم التوضيحي - github.com/ashleymcnamara/gophers

إذا لم تكن راضيًا عن سرعة تطبيقك أو معلمات أخرى ، فيمكنك العمل مع المُنشئ خارج الصندوق. للقيام بذلك ، تحتاج إلى:
  • سجل استيراد ملفات التعريف: import _ "net / http / pprof"
  • أضف خادم http لتلقي النتائج من البروفايل: go http.ListenAndServe ("0.0.0.0:8080" ، لا شيء)

الذهاب الأدوات


واحدة من فوائد Go هي مجموعتها الواسعة من الأدوات القياسية. لقد اخترنا بعض الأدوات المساعدة الأكثر إثارة للاهتمام ، في رأينا (في الواقع ، هناك الكثير منها):

  • benchcmp - المقارنة المعيارية ، والأداء قبل وبعد التغييرات
  • اذهب غطاء أداة - تحليل تغطية رمز عن طريق الاختبارات
  • godoc - توليد الوثائق القائمة على التعليق
  • goimports - تحليل الاستيراد (إزالة غير مستخدمة ، إضافة مفقود)
  • gorename - إعادة بيع المنازل
  • ضبط العرض الحالي
  • تذهب البيطري - كثيرا ما واجه خطأ لينتر
  • الذهاب الاختبارات المدى التشغيل والاختبارات
  • اذهب الإصلاح - إصلاح التغييرات عند تغيير API (قبل الإصدار 1.0)
  • الذهاب أداة pprof - التنميط
  • الذهاب fmt - تنسيق التعليمات البرمجية حسب نمط الرمز
  • كاشف السباق - العثور على سباق البيانات في وقت التشغيل

القدرة التنافسية


قوة أخرى في Go هي أنه من السهل كتابة كود تنافسي بهذه اللغة. للقيام بذلك ، يمكنك ببساطة استخدام الكلمات الأساسية قبل استدعاء الوظيفة.



الذهاب التدريب


إذا كنت ترغب في البرنامج على Go ، فستستغرق البداية وقتًا قليلًا نسبيًا. يدعم المطورون - Core Team - دورة A Tour of Go بعدة لغات ، بما في ذلك الروسية. يمكن إكمال هذه الدورة في 1-3 أيام فقط. من حيث التعلم ، تعد Go واحدة من أبسط اللغات.

فماذا تقرأ:


ORM في الذهاب


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

  • حزمة عامة لجميع قواعد بيانات SQL
  • محمول: لا يحتوي على أي ميزات في مجال العمل مع قواعد البيانات. من الناحية المثالية ، يجب أن يعمل كل شيء بشكل صحيح إذا قمت بتغيير برنامج التشغيل.
  • تحويل أنواع الانتقال إلى أنواع قواعد البيانات القياسية (يجب أن يكون من الممكن معالجة أنواع محددة)
  • يحتوي على تجمع الاتصال
  • موضوع السلامة ل goroutines

نموذج استعلام SELECT باستخدام قاعدة بيانات / sql


defer rows.Close() for rows.Next() { var message string err := rows.Scan(&message) if err != nil { log.Panic(err) } fmt.Println(message) } if err := rows.Err(); err != nil { log.Panic(err) } 

كما ترى من المثال ، سيتعين تنفيذ الكثير من إجراءات القوالب في كل مرة. على سبيل المثال:

  • كائن صف وثيق: تأجيل الصفوف. إغلاق ()
  • تحقق من وجود أخطاء err: = rows.Err ()؛ يخطئ! = لا شيء منذ ذلك الحين ليس من الواضح لماذا أعادتنا الصفوف. (التالي) كاذبة

من كل هذا ، أريد استخدام شيء أكثر عالمية وبساطة ، على سبيل المثال ، ORM.

أنواع تطبيقات ORM


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



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

  • يرتكب على الفور في الماجستير
  • علامات مفقودة
  • بناء SQL غير متوقعة

في الوقت الحالي ، في عملنا ، نفضل العديد من ORM التي لا تستخدم الواجهة {} - هذه هي Kallax و Reform و Sqlboiler. عادة ما نستخدم حزمة Golang لعمليات الترحيل ومستودع orm bench مع علامات ORM على Go. في الوقت نفسه ، يجب أن لا تطارد المعايير فقط. في أغلب الأحيان ، لا تعد السرعة مهمة مثل جودة الكود ووظائفه.

لتلخيص


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

تم إعداد المقال على أساس تقريرنا في اجتماع Hot Backend في سمارة.

Source: https://habr.com/ru/post/ar458074/


All Articles