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

كيفية إدارة الوظائف لهياكل Go المماثلة باستخدام الحقول المشتركة؟

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

How to Manage Functions for Similar Go Structs with Shared Fields?

أفضل الممارسات: إدارة الوظائف للبنيات المشابهة ذات الحقول المشتركة

في Go، من الشائع مواجهة بنيات متعددة ذات مجالات مماثلة، و هناك حاجة لإجراء عمليات مماثلة عليها. لتجنب تكرار التعليمات البرمجية مع الحفاظ على المرونة، ضع في الاعتبار الاستراتيجيات التالية:

إنشاء نوع مخصص للحقل المشترك:

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

type Version string

func (v Version) PrintVersion() {
    fmt.Println("Version is", v)
}

ثم قم بتضمين نوع الإصدار في البنيات:

type Game struct {
    Name               string
    MultiplayerSupport bool
    Genre              string
    Version
}

type ERP struct {
    Name               string
    MRPSupport         bool
    SupportedDatabases []string
    Version
}

يسمح لك هذا بطباعة الإصدار باستخدام طريقة PrintVersion في حقل الإصدار:

g.PrintVersion()
e.PrintVersion()

استخدام الانعكاس:

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

type Printer interface {
    PrintVersion() error
}

func PrintVersion(p Printer) error {
    t := reflect.TypeOf(p)
    method, ok := t.MethodByName("PrintVersion")
    if !ok {
        return fmt.Errorf("object doesn't have a PrintVersion method")
    }

    return method.Func.Call([]reflect.Value{reflect.ValueOf(p)})[0].Interface().(error)
}

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

var game Game
var erp ERP

PrintVersion(game)
PrintVersion(erp)
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3