تحويل شرائح الواجهات إلى شرائح واجهة متوافقة
يمكن أن يوفر تنفيذ واجهات مختلفة تحتوي على طرق متداخلة مرونة في البرمجة. ومع ذلك، فإن تمرير شريحة من واجهة واحدة إلى دالة تتوقع واجهة مختلفة ولكنها متوافقة يمكن أن يؤدي إلى حدوث أخطاء. دعونا نستكشف كيفية معالجة هذه المشكلة في 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