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

## كيفية تحويل شريحة من الواجهات إلى شريحة واجهة متوافقة في Go؟

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

## How to Convert a Slice of Interfaces to a Compatible Interface Slice in Go?

تحويل شرائح الواجهات إلى شرائح واجهة متوافقة

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

لنفترض أن لدينا الواجهات A وB، حيث تتضمن A B. إن تنفيذ A، Impl، يرضي كلاً من A وB.

type A interface {
    Close() error
    Read(b []byte) (int, error)
}

type Impl struct {}

func (I Impl) Read(b []byte) (int, error) {
    fmt.Println("In read!")
    return 10, nil
}

func (I Impl) Close() error {
    fmt.Println("I am here!")
    return nil
}
يمكن تمرير العناصر الفردية عبر الوظائف بسهولة. ومع ذلك، قد تفشل محاولة تمرير شرائح A إلى الدوال التي تتوقع io.Reader.

func single(r io.Reader) {
    fmt.Println("in single")
}

func slice(r []io.Reader) {
    fmt.Println("in slice")
}

im := &Impl{}

// works
single(im)

// FAILS!
list := []A{t}
slice(list)
لحل هذه المشكلة، يمكننا إنشاء شريحة جديدة من النوع []io.Reader وملؤها بعناصر من []A. هذا هو الحل البديل لتجاوز القيد وضمان التوافق بين أنواع الواجهة المختلفة ولكن المتداخلة.

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

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

Copyright© 2022 湘ICP备2022001581号-3