Maison > Article > développement back-end > Comment puis-je implémenter efficacement des méthodes sur les interfaces Go sans héritage multiple ?
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.
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.
Au lieu d'utiliser l'anti-modèle consistant à masquer votre structure et à exporter uniquement l'interface, envisagez l'approche suivante :
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 { // ... }
Définissez une méthode String() pour le pointeur vers votre structure Card :
func (c *Card) String() string { // ... }
Cette approche vous permet de :
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!