Go ne prend pas en charge l'héritage multiple, mais il est possible d'implémenter plusieurs interfaces pour un seul type. Cela vous permet de définir un type conforme aux exigences de plusieurs interfaces.
Dans votre exemple, vous disposez d'une interface Card et d'une structure de carte qui implémente l'interface Card. Vous souhaitez pouvoir utiliser l'interface Card pour représenter les cartes, mais vous souhaitez également avoir une représentation sous forme de chaîne des cartes.
Pour résoudre ce problème, vous pouvez définir une interface Stringer :
type Stringer interface { String() string }
Et puis demandez à la structure de carte d'implémenter à la fois les interfaces Card et Stringer :
type card struct { cardNum int face string suit string } 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()) }
Cela vous permettrait d'utiliser l'interface Card pour représenter les cartes, et vous pourriez également utiliser l'interface Stringer pour obtenir une représentation sous forme de chaîne des cartes.
Notez que cette approche ne cache pas les détails d'implémentation de la structure de la carte. Si vous souhaitez réellement masquer les détails d'implémentation, vous pouvez utiliser une fonction d'usine pour créer des valeurs de carte, puis renvoyer uniquement l'interface de carte aux clients.
func NewCard(num int) Card { newCard := card{ cardNum: num, face: faces[num%len(faces)], suit: suits[num/len(faces)], } return &newCard }
Cela vous permettrait de créer des valeurs de carte sans exposer les détails d'implémentation de la structure de la carte.
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!