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

كيف يمكنك استرداد قائمة بأسماء الطرق من واجهة في Go باستخدام الانعكاس؟

تم النشر بتاريخ 2024-11-11
تصفح:921

How do you retrieve a list of method names from an interface in Go using reflection?

الحصول على قائمة بأسماء الطرق من الواجهة

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

خذ بعين الاعتبار الواجهة التالية:

type FooService interface {
    Foo1(x int) int
    Foo2(x string) string
}

للحصول على قائمة بأسماء الطرق لهذه الواجهة باستخدام الانعكاس:

  1. الحصول على الانعكاس. نوع الواجهة:
t := reflect.TypeOf((*FooService)(nil)).Elem()

يسترجع هذا السطر Reflect.Type للنوع الملموس الذي ينفذ واجهة FooService.

  1. استرجاع عدد الطرق:
for i := 0; i  

تقوم الدالة NumMethod () بإرجاع عدد الطرق في الواجهة.

  1. احصل على أسماء الطرق:
]
s = append(s, t.Method(i).Name)
ترجع الدالة Method(i) كائن Reflect.Method الذي يمثل الطريقة في الفهرس i. يحتوي حقل الاسم لهذا الكائن على اسم الطريقة.

ستحتوي القائمة الناتجة على أسماء الطرق ["Foo1"، "Foo2"].

التفسيرات:

    يتم استخدام بناء الجملة (*FooService)(nil) لإنشاء مؤشر إلى مثيل مجهول لواجهة FooService. يعد هذا ضروريًا للحصول على نوع الانعكاس للواجهة.
  • تقوم طريقة Elem () بإرجاع نوع الانعكاس للنوع الملموس الذي ينفذ الواجهة، بدلاً من نوع الواجهة نفسها. ]تقوم الدالة NumMethod() بإرجاع عدد الطرق المعلنة في الواجهة، حتى لو كان النوع الملموس يطبق طرقًا إضافية.
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3