Maison > développement back-end > Golang > Comment puis-je implémenter plusieurs interfaces dans Go pour un seul type ?

Comment puis-je implémenter plusieurs interfaces dans Go pour un seul type ?

Mary-Kate Olsen
Libérer: 2024-11-24 06:39:15
original
347 Les gens l'ont consulté

How Can I Implement Multiple Interfaces in Go for a Single Type?

Interfaces multiples dans Go

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
}
Copier après la connexion

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())
}
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal