الفشل في تبديل النوع: شرح متعمق
يتيح تبديل النوع في Go التعامل الفعال مع القيم بناءً على أنواعها المحددة. ومع ذلك، على عكس عبارات حالة التبديل القياسية، فإن السقوط غير مسموح به بشكل صريح في نوع التبديل. يثير اختيار التصميم هذا تساؤلات حول الأساس المنطقي له.
فهم الأسباب
تنص مواصفات Go على أن "الخطأ" غير مسموح به في مفاتيح الكتابة. ينبع هذا الحظر من عدة عوامل:
مثال للتوضيح
للتوضيح المشكلة، خذ بعين الاعتبار الكود التالي:
switch i := x.(type) { case int: fmt.Printf("%T\n", i) // prints "int" case bool: fmt.Printf("%T\n", i) // prints "bool" fallthrough case string: fmt.Printf("%T\n", i) }
إذا تم السماح بالخطأ، فليس من الواضح ما هو النوع الذي سيتم طباعته لحالة السلسلة. سيكون من الغموض ما إذا كان يجب أن أظل منطقيًا أو أصبح واجهة{} تحتوي على كل من القيمة المنطقية والسلسلة.
الحلول البديلة
بينما لا يُسمح بالخطأ في اكتب مفاتيح التبديل، هناك طرق بديلة لتحقيق سلوك مماثل:
switch i := x.(type) { case bool, string: if b, ok := i.(bool); ok { // b is a bool } // i is an interface{} that contains either a bool or a string }
يسمح هذا الأسلوب بمعالجة أكثر تحديدًا للأنواع المختلفة دون تقديم حالات عدم تطابق في النوع أو غموض.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3