Gestion des interfaces dans Go
Les interfaces Go fournissent un mécanisme puissant d'abstraction. Cependant, leur utilisation peut poser certains défis lorsqu'il s'agit de plusieurs interfaces et types concrets.
Comprendre les interfaces Go
Contrairement aux langages comme C et Java, Go ne prend pas en charge les héritage de classe. Au lieu de cela, les interfaces servent de forme de polymorphisme qui permet à des types non liés d'implémenter le même ensemble de méthodes. Ils ne définissent aucun détail d'implémentation sous-jacent.
Interfaces multiples et implémentation
Dans votre exemple, vous rencontrez un problème lorsque vous tentez d'accéder à la représentation sous forme de chaîne ("String( )") pour une instance de votre interface "Carte". En effet, l'interface elle-même ne définit pas cette méthode.
Bonnes pratiques en matière de conception d'interface
Pour résoudre ce problème et optimiser la conception de votre interface, tenez compte des éléments suivants :
Déclarer les interfaces prématurées (si nécessaire) : Ne déclarer les interfaces avant l'implémentation que si :
Approche alternative
Au lieu d'utiliser une interface pour définir à la fois l'API "Carte" et la conversion de chaîne, pensez à utiliser l'intégration :
type Card struct { cardNum int face string suit string } // Interface for the Card's game-related behavior type GameCard interface { GetFace() string GetSuit() string } // Embedded interface for string conversion type Stringer interface { String() string } // Implement both interfaces on the Card type func (c *Card) GetFace() string { return c.face } func (c *Card) GetSuit() string { return c.suit } func (c *Card) String() string { return fmt.Sprintf("%s%s ", c.GetFace(), c.GetSuit()) } // Usage: func main() { // Create a Card instance and access its methods card := Card{cardNum: 0} fmt.Println(card.GetFace()) fmt.Println(card.GetSuit()) fmt.Println(card.String()) }
Cette approche vous permet de définir des interfaces distinctes pour différentes préoccupations (logique de jeu et conversion de chaînes) et de les implémenter sur la même structure.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3