Maison  >  Article  >  développement back-end  >  Comment puis-je implémenter efficacement des méthodes sur les interfaces Go sans héritage multiple ?

Comment puis-je implémenter efficacement des méthodes sur les interfaces Go sans héritage multiple ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-23 02:00:34612parcourir

How Can I Effectively Implement Methods on Go Interfaces Without Multiple Inheritance?

Pourquoi utiliser les interfaces dans Go ?

Les interfaces dans Go activent le polymorphisme, vous permettant de créer des types génériques pouvant fonctionner avec n'importe quel type implémentant ces interfaces. Cependant, contrairement à des langages comme Java ou C , Go ne prend pas en charge l'héritage multiple. Cela soulève la question de savoir comment réaliser certains modèles de conception, comme l'utilisation d'un type qui « devrait implémenter » deux interfaces, sans héritage.

Votre cas d'utilisation

Pour masquer votre type de structure et représenter comme interface :

type Card interface {
    GetFace() string
    GetSuit() string
}

Vous souhaitez également définir une méthode String() pour votre interface Card, mais cela présente un défi car vous ne pouvez pas transmettre d'interface à String() implémentation de la méthode.

Approche alternative

Au lieu d'utiliser l'anti-modèle consistant à masquer votre structure et à exporter uniquement l'interface, envisagez l'approche suivante :

Exporter un pointeur vers le Struct

Masquez vos champs de structure pour empêcher toute modification externe, mais exportez un pointeur vers it :

type Card struct {
    // ... struct fields here
}

func NewCard(...) *Card {
    // ...
}

Implémentez String() pour le type de pointeur

Définissez une méthode String() pour le pointeur vers votre structure Card :

func (c *Card) String() string {
    // ...
}

Cette approche vous permet de :

  • Masquer les détails de la structure tout en exposant l'interface.
  • Garder l'interface découplée des implémentations spécifiques.
  • Fournir une représentation String() pour les clients utilisant l'interface.

Conclusion

Bien que le modèle "masquage de l'interface" puisse sembler attrayant, cela peut conduire à une mauvaise encapsulation, nuire à la documentation et introduire une complexité inutile. L'approche recommandée consistant à exporter un pointeur vers la structure et à implémenter la méthode String() sur le type de pointeur fournit une solution plus propre et plus efficace.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn