Heim >Backend-Entwicklung >Golang >Wie kann ich in Go mehrere Schnittstellen für einen einzelnen Typ implementieren?

Wie kann ich in Go mehrere Schnittstellen für einen einzelnen Typ implementieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-24 06:39:15358Durchsuche

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

Mehrere Schnittstellen in Go

Go unterstützt keine Mehrfachvererbung, es ist jedoch möglich, mehrere Schnittstellen für einen einzelnen Typ zu implementieren. Dadurch können Sie einen Typ definieren, der den Anforderungen mehrerer Schnittstellen entspricht.

In Ihrem Beispiel haben Sie eine Kartenschnittstelle und eine Kartenstruktur, die die Kartenschnittstelle implementiert. Sie möchten in der Lage sein, die Kartenschnittstelle zur Darstellung von Karten zu verwenden, möchten aber auch eine String-Darstellung der Karten haben.

Um dieses Problem zu lösen, könnten Sie eine Stringer-Schnittstelle definieren:

type Stringer interface {
    String() string
}

Und dann lassen Sie die Kartenstruktur sowohl die Karten- als auch die Stringer-Schnittstelle implementieren:

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())
}

Dies würde es Ihnen ermöglichen, die Kartenschnittstelle zur Darstellung von Karten zu verwenden, und Sie könnten sie auch verwenden die Stringer-Schnittstelle, um eine String-Darstellung der Karten zu erhalten.

Beachten Sie, dass dieser Ansatz die Implementierungsdetails der Kartenstruktur nicht verbirgt. Wenn Sie die Implementierungsdetails wirklich verbergen möchten, können Sie eine Factory-Funktion zum Erstellen von Kartenwerten verwenden und dann nur die Kartenschnittstelle an Clients zurückgeben.

func NewCard(num int) Card {
    newCard := card{
        cardNum: num,
        face:    faces[num%len(faces)],
        suit:    suits[num/len(faces)],
    }

    return &newCard
}

Dadurch können Sie Kartenwerte erstellen, ohne sie offenzulegen die Implementierungsdetails der Kartenstruktur.

Das obige ist der detaillierte Inhalt vonWie kann ich in Go mehrere Schnittstellen für einen einzelnen Typ implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn