Handhabung von Schnittstellen in Go
Go-Schnittstellen bieten einen leistungsstarken Mechanismus zur Abstraktion. Allerdings kann ihre Verwendung gewisse Herausforderungen mit sich bringen, wenn es um mehrere Schnittstellen und konkrete Typen geht.
Go-Schnittstellen verstehen
Im Gegensatz zu Sprachen wie C und Java unterstützt Go keine direkte Klassenvererbung. Stattdessen dienen Schnittstellen als eine Form des Polymorphismus, der es unabhängigen Typen ermöglicht, denselben Methodensatz zu implementieren. Sie definieren keine zugrunde liegenden Implementierungsdetails.
Mehrere Schnittstellen und Implementierung
In Ihrem Beispiel tritt ein Problem auf, wenn Sie versuchen, auf die Zeichenfolgendarstellung zuzugreifen („String( )")-Methode für eine Instanz Ihrer „Card“-Schnittstelle. Dies liegt daran, dass die Schnittstelle selbst diese Methode nicht definiert.
Best Practices für das Interface-Design
Bedenken Sie Folgendes, um dieses Problem zu beheben und Ihr Interface-Design zu optimieren:
Deklarieren Sie vorzeitige Schnittstellen (falls erforderlich): Deklarieren Sie Schnittstellen nur vor der Implementierung, wenn:
Alternativer Ansatz
Anstatt eine Schnittstelle zu verwenden, um sowohl die „Card“-API zu definieren und String-Konvertierung, erwägen Sie die Verwendung von Einbettung:
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()) }
Dieser Ansatz ermöglicht es Ihnen, separate Schnittstellen für unterschiedliche Anliegen (Spiellogik und String-Konvertierung) zu definieren und diese in derselben Struktur zu implementieren.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3