استرجاع اسم الوظيفة مع الانعكاس
في Go، يوفر الانعكاس آلية لفحص هياكل البرنامج ومعالجتها في وقت التشغيل. يعد الوصول إلى اسم الوظيفة إحدى حالات الاستخدام هذه. ومع ذلك، فإن محاولة الحصول على الاسم مباشرة من نوعه قد يؤدي إلى سلسلة فارغة.
السلوك المتوقع
استرداد اسم الوظيفة باستخدام Reflect.TypeOf(function). يقوم Name() بإرجاع سلسلة فارغة لأنه يشير إلى النوع نفسه، والذي لا يحمل اسم الوظيفة.
الحل
لاسترداد اسم الوظيفة، نحن بحاجة إلى الاستفادة من وقت التشغيل. FuncForPC. تأخذ هذه الوظيفة المؤشر إلى القيمة المنعكسة للوظيفة وترجع المؤشر إلى بنية *Func. يؤدي استدعاء أسلوب الاسم على هذا *Func إلى الحصول على اسم الوظيفة المتوقع على النحو التالي:
name := runtime.FuncForPC(reflect.ValueOf(function).Pointer()).Name()
هذا يُرجع النهج كلاً من اسم الحزمة والوظيفة، على سبيل المثال. "حزمة. وظيفة". إذا رغبت في ذلك، يمكن استخراج اسم الحزمة عن طريق ترميز السلسلة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3