في Go، غالبًا ما يستخدم المطورون الواجهة لتحديد السلوك المتوقع، مما يجعل التعليمات البرمجية مرنة وقوية. ولكن كيف يمكنك التأكد من أن النوع ينفذ الواجهة بالفعل، خاصة في قاعدة تعليمات برمجية كبيرة؟ يوفر Go طريقة بسيطة وفعالة للتحقق من ذلك في وقت الترجمة، مما يمنع مخاطر أخطاء وقت التشغيل ويجعل التعليمات البرمجية الخاصة بك أكثر موثوقية وقابلة للقراءة.
ربما تكون قد شاهدت بناء جملة مثل
var _ InterfaceName = TypeName{} // or var _ InterfaceName = (*TypeName)(nil)
في كود Go. سترشدك هذه المقالة إلى ما تفعله هذه السطور وسبب أهميتها.
في Go، للتحقق مما إذا كان النوع (على سبيل المثال، البنية) ينفذ واجهة، يمكنك إضافة تأكيد وقت الترجمة. يخبر هذا التأكيد مترجم Go، "تأكد من أن هذا النوع ينفذ هذه الواجهة - الآن، وليس في وقت التشغيل."
هناك طريقتان للقيام بذلك:
var _ InterfaceName = TypeName{}
أو، إذا كانت الواجهة تتطلب أجهزة استقبال المؤشر:
var _ InterfaceName = (*TypeName)(nil)
إذا لم يقم TypeName بتنفيذ InterfaceName بشكل كامل (أي إذا كان يفتقد الأساليب المطلوبة)، فسيقوم مترجم Go بإثارة خطأ على الفور. يضمن هذا الفحص البسيط أن الأنواع الخاصة بك تتوافق مع الواجهة التي من المتوقع أن تلبيها، قبل وقت طويل من تشغيل التعليمات البرمجية الخاصة بك.
يعتمد الاختيار بين TypeName{} و(*TypeName)(nil) على كيفية تعريف أساليب النوع الخاص بك:
يوفر استخدام اختبارات وقت الترجمة العديد من المزايا:
دعونا نلقي نظرة على مثال لجعله ملموسًا. لنفترض أن لدينا شكل واجهة بسيط ودائرة هيكلية:
type Shape interface { Area() float64 } type Circle struct { Radius float64 } func (c Circle) Area() float64 { return 3.14 * c.Radius * c.Radius }
للتحقق من أن الدائرة تنفذ الشكل، يمكننا إضافة تأكيد وقت الترجمة:
var _ Shape = Circle{}
أو، إذا كانت أساليب Circle تتطلب أجهزة استقبال للمؤشر:
var _ Shape = (*Circle)(nil)
يعد استخدام تأكيدات وقت الترجمة للتحقق مما إذا كان النوع يلبي الواجهة من أفضل الممارسات في Go. فهو لا يضمن فقط أن الأنواع تلبي عقود الواجهة الخاصة بها، مما يقلل من مخاطر أخطاء وقت التشغيل، ولكنه يعمل أيضًا على تحسين إمكانية قراءة التعليمات البرمجية وقابلية الصيانة. يعد هذا الأسلوب مفيدًا بشكل خاص في قواعد التعليمات البرمجية الأكبر أو متعددة الأشكال حيث تكون الواجهات أساسية في التصميم.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3