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

كيفية التعامل مع تواقيع الأساليب المتضاربة في واجهات متعددة؟

تم النشر بتاريخ 2024-12-21
تصفح:523

How to Handle Conflicting Method Signatures in Multiple Interfaces?

كيفية تنفيذ واجهات متعددة بتوقيعات طريقة متطابقة في حزم مختلفة

لنفترض أنك بحاجة إلى تنفيذ واجهات محددة في حزم منفصلة مع توقيعات طريقة متعارضة . قد يكون هذا أمرًا صعبًا، لكن Go يوفر حلاً.

دعونا نفكر في مثال:

  • في الحزمة أ:

    package A
    
    type Doer interface {
      Do() string
    }
    
    func FuncA(doer A.Doer) {
      // Use doer.Do() here to implement functionality
    }
  • في الحزمة ب:

    package B
    
    type Doer interface {
      Do() string
    }
    
    func FuncB(doer B.Doer) {
      // Use doer.Do() here to implement functionality
    }

في الحزمة الرئيسية الخاصة بك:

package main

import (
    "path/to/A"
    "path/to/B"
)

type C int

// C implements both A.Doer and B.Doer, but the implementation of Do() aligns with A.
func (c C) Do() string {
    return "C implements both A and B"
}

func main() {
    c := C(0)
    A.FuncA(c) // Acceptable as C implements A.Doer
    B.FuncB(c) // Error, as the Do() implementation in C doesn't meet B.Doer requirements
}

الحل:

لحل هذا التعارض، يقدم Go نهجًا موجزًا:

if _, ok := obj.(A.Doer); ok {
}

يسمح لك هذا بالتحقق مما إذا كان الكائن (من نوع الواجهة) يتوافق مع نوع واجهة آخر (على سبيل المثال، A.Doer) في وقت التشغيل.

ومع ذلك، يسلط البروتوكول الاختياري الضوء على تعقيد إضافي : المنطق المطبق لـ Do() في الحزمة A والحزمة B مختلف. لمعالجة هذه المشكلة، قم بإنشاء أغلفة حول الكائن الخاص بك:

  • DoerA مع C كحقل، وتنفيذ A.Do() منطقيًا.
  • DoerB مع C كحقل، وتنفيذ B. Do() منطقيًا.

من خلال تنفيذ أغلفة مميزة، يمكنك التحكم في الطريقة التي سيتم استخدامها بناءً على نوع الواجهة المتوقعة (A.Doer أو B.Doer). وهذا يلغي الحاجة إلى أسلوب Do() واحد على كائن C الأصلي، والذي قد يواجه صعوبة في تنفيذ كلا المنطقين.

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

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

Copyright© 2022 湘ICP备2022001581号-3