"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > هل يمكن استبدال الهياكل المدمجة للميراث في GO؟

هل يمكن استبدال الهياكل المدمجة للميراث في GO؟

نشر في 2025-02-06
تصفح:631

  Can Embedded Structs Be Replaced for Method Inheritance in Go?

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

هياكل مضمنة

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

تلقائيا إلى بنية تحتوي على. لتعزيز الأساليب ، يجب أن يكون الهيكل المدمج مجهول الهوية.

كانت أساليب البنية المحتوية. يتم تحقيق ذلك من خلال اتباع هذه القواعد:

، الأساليب التي تمت ترقيتها لها مستقبلات من النوع t أو *t.

خريطة [سلسلة] واجهة {} Func (P Props) GetString (سلسلة مفاتيح) سلسلة { إرجاع p [مفتاح]. (سلسلة) } اكتب العقدة { الدعائم } Func Main () { Node: = Node {"Test": "Foo"} fmt.println (node.getString ("test")) // الإخراج: فو }

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

باستخدام جهاز استقبال المؤشر:

اكتب Map [string] واجهة {} Func (P *Props) GetString (سلسلة المفاتيح) سلسلة { إرجاع p [مفتاح]. (سلسلة) } اكتب العقدة { الدعائم } Func Main () { العقدة: = & node {props {"test": "foo"}} fmt.println (node.getString ("test")) // الإخراج: فو }

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

الاستنتاج

ليست دائما الخيار الأفضل. في الحالات التي لا يكون فيها ترقية الطريقة غير مطلوب أو ضروري ، يمكن أن يوفر استخدام مستقبل المؤشر بديلاً أكثر مرونة وأداء.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3