؟ الحجج
Linter for Go يتحقق من حجج المكالمات الثابتة مقابل حراس الوظائف (المعروف أيضًا باسم العقود).
مثال
دعنا نقول ، لديك الوظيفة التالية:
func div ( n , d float64 ) float64 {
if d == 0 {
panic ( "denominator must not be zero" )
}
return n / d
} ثم تسميها هكذا:
حتى لو كنا لا نعرف userInput ، يمكننا أن نرى أن استدعاء الوظيفة هذه سوف الذعر في وقت التشغيل لأن الوسيطة الثانية هي دائمًا صفر.
يجد Linter ويقارن مثل هذه الأماكن باستخدام تنفيذ رمز جزئي آمن والسحر الأسود.
؟ تثبيت
go install github.com/orsinium-labs/arguard@latest
الاستخدام
الأعلام المتاحة:
-
-contracts.follow-imports : اضبط هذا العلامة على خطأ لعدم استخراج العقود من الوحدات النمطية المستوردة. بمعنى آخر ، لن يتم الإبلاغ عن انتهاكات العقد (الحراسة) فقط إذا كانت الوظيفة مع العقد ودعوة الوظيفة موجودة في نفس الحزمة التي تم تحليلها. مفيد لتحسين الأداء . -
-contracts.report-contracts : تنبعث من رسالة لكل عقد تم اكتشافه. مفيد لتصحيح الأخطاء لمعرفة ما إذا كان قد تم اكتشاف عقد من قبل المبتدئ أم لا. -
-arguard.report-errors : اضبط هذا العلامة لإظهار الفشل أثناء تنفيذ العقد. افتراضيًا ، إذا فشل الجدل في تنفيذ عقد ، فإنه يتحرك فقط دون الإبلاغ عن أي شيء. مفيد لتصحيح الأخطاء لمعرفة سبب عدم الإبلاغ عن خطأ في العقد.
؟ QNA
- ؟ كيف تعمل؟ هناك نوعان من التحليلات في الداخل. أول واحد يكتشف العقود الآمنة للتنفيذ (الحراس) في الكود. تكتشف الدعوة الثانية المكالمات إلى الوظائف ذات العقود المعروفة ، وتستخلصات الحجج المعروفة بشكل ثابت ، وتنفذ العقود التي يمكن تنفيذها باستخدام Yaegi.
- ؟ ما هو الحارس (العقد)؟ حالة إذا كانت هناك حالة في بداية الوظيفة (يمكن فقط للعقود الأخرى أن تذهب قبلها) مع فحص آمن من التنفيذ والجسم يعيد خطأ فقط أو استدعاء
panic . - ؟ ما مدى موثوقية النتائج؟ إذا كان يوضح خطأ ، فهناك ، على الأرجح ، خطأ. إذا لم يبلغ عن خطأ ، فقد لا يزال هناك خطأ. إنه مخطط ، وليس بمدحة رسمية.
- ⚖ ما مدى استقرار المشروع؟ يمكن أن يكون التحليل الثابت في GO فوضويًا ، خاصةً عندما نقوم أيضًا بتنفيذ الكود الجزئي. قد يفشل المبتدئ أو يكون خطأ أو لا يكون ذكيًا كما يمكن أن يكون. ومع ذلك ، فهو محلل ثابت ، وليس تبعية للإنتاج ، لذلك يجب أن يكون آمنًا لاستخدامه في أي مشروع في أي بيئة. ومع ذلك ، ضع في اعتبارك أنه لا يزال هناك تنفيذ رمز جزئي ، لذلك ربما لا ينبغي عليك تشغيله على رمز غير موثوق به ، فقط لتكون آمنًا.
- ؟ هل سيكون هناك تغييرات كسر؟ يتبع المشروع Semver. ومع ذلك ، يمكن لكل إصدار ، حتى تصحيح واحد ، البدء في الإبلاغ عن انتهاكات جديدة في القانون الخاص بك. لذلك ، بمعنى ما ، يمكن أن يكون كل إصدار ينكسر.
- ؟ هل يوجد تكامل Golangci-lint؟ ليس بعد ولكن في النهاية سيكون. من السهل دمج أي مخطط يعمل بالطاقة مع Golangci-lint ، ويتم تشغيل الجدل. ابقوا متابعين.
- ✏ هل هناك تكامل IDE؟ ليس بعد. عندما يكون لدينا تكامل Golangci-Lint ، سوف تأتي عمليات تكامل IDE مجانًا.
- ؟ هل هذه فكرة جديدة؟ يقوم المشروع بتنفيذ أحد الأشياء التي تتعامل ، يمكن لمكتبة Python الخاصة بي للتصميم حسب العقد القيام بها. تم بناء الصفقة نفسها على حكمة الأجيال ، انظر هذا الجدول الزمني.
- هل هناك واجهة برمجة تطبيقات GO حتى أتمكن من استخدامها كمكتبة؟ نعم. توفر حزمة التحليل طريقة محلية لتكوين المحللين ، وهكذا يمكنك استخدام المشروع. انظر Main.GO للحصول على مثال على كيفية إنشاء وتكوين
analysis.Analyzer متعددة. - ؟ ؟ ️ هل يتم الحفاظ عليها بنشاط؟ المشروع ، في أفضل تقاليد Unix-Way ، له نطاق صغير جدًا ومحدد بوضوح. قد أعود إليها من وقت لآخر وأحضر أفكارًا جديدة مثيرة للاهتمام التي أمتلكها خلال الليالي بلا نوم ، ولكن لا يوجد شيء للحفاظ عليه يوميًا. إذا نجحت اليوم ، فلن تنهار غدًا ، وذلك بفضل القائمة القصيرة لتبعيات ووعد التوافق 1.
- ؟ ماذا لو وجدت خطأ؟ شوك المشروع ، إصلاح الخلل ، اكتب بعض الاختبارات ، وفتح طلب سحب. عادةً ما أقوم بدمج أي مساهمات وأطلقها في غضون يوم واحد.