Ein Interface definieren
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 13 von 68.
Nachdem Sie nun verstanden haben, was Schnittstellen konzeptionell sind, wollen wir lernen, wie man tatsächlich eine in Go definiert. Eine Schnittstelle wird mit dem Schlüsselwort interface definiert, gefolgt von einer Reihe von Methodensignaturen, die in geschweiften Klammern eingeschlossen sind.
Hier ist die grundlegende Syntax zum Definieren eines Interfaces:
type InterfaceName interface {
MethodName() ReturnType
AnotherMethod(parameter Type) ReturnType
}Beachten Sie, dass ein Interface nur Methodensignaturen enthält – den Methodennamen, Parameter und Rückgabetypen –, aber keine Implementierung. Das Interface legt nicht fest, wie diese Methoden funktionieren sollen, sondern nur, welche Methoden existieren müssen.
Zum Beispiel sehen Sie hier, wie Sie ein einfaches Shaper-Interface definieren, das von jedem implementierenden Typ eine Area-Methode verlangt:
type Shaper interface {
Area() float64
}Diese Schnittstelle legt einen Vertrag fest: Jeder Typ, der als Shaper betrachtet werden möchte, muss eine Area-Methode besitzen, die keine Parameter entgegennimmt und einen float64 zurückgibt. Der Schnittstelle ist es egal, um welchen Typ es sich handelt oder wie er die Fläche berechnet – sie achtet nur darauf, dass die Methode mit der korrekten Signatur existiert.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Aufgabe
EinfachIn dieser Herausforderung üben Sie das Definieren von Interfaces in Go, indem Sie ein einfaches Media-Player-System erstellen. Sie definieren ein Interface, das einen Vertrag für verschiedene Arten von Mediengeräten festlegt.
Sie erhalten eine Eingabe:
- Einen String, der eine Medienaktion darstellt (z. B.
"play","pause"oder"stop")
Ihre Aufgabe ist es:
- Definieren Sie ein Interface namens
MediaPlayermit drei Methodensignaturen:Play(), die einen String zurückgibtPause(), die einen String zurückgibtStop(), die einen String zurückgibt
- Geben Sie basierend auf der Eingabeaktion die entsprechende Methodensignatur aus Ihrem
MediaPlayer-Interface im folgenden Format aus:"MediaPlayer interface requires: [MethodName]() string"
Die Ausgabeanweisung soll das oben definierte Interface widerspiegeln — Sie beschreiben, welche Methodensignatur das MediaPlayer-Interface für die jeweilige Aktion erfordert. Betrachten Sie es so, als ob Ihr Programm seinen eigenen Interface-Vertrag inspiziert und darüber berichtet.
Die Methodennamen sollten großgeschrieben (exportiert) werden, da sie Teil einer Interface-Definition sind. Für die Eingabe "play" geben Sie "MediaPlayer interface requires: Play() string" aus, für "pause" geben Sie "MediaPlayer interface requires: Pause() string" aus und für "stop" geben Sie "MediaPlayer interface requires: Stop() string" aus.
Diese Herausforderung konzentriert sich auf das grundlegende Konzept der Definition von Interfaces mit Methodensignaturen und legt den Vertrag fest, den jeder implementierende Typ erfüllen muss.
Spickzettel
Eine Schnittstelle wird mit dem Schlüsselwort interface definiert, gefolgt von Methodensignaturen in geschweiften Klammern:
type InterfaceName interface {
MethodName() ReturnType
AnotherMethod(parameter Type) ReturnType
}Schnittstellen enthalten nur Methodensignaturen (Name, Parameter, Rückgabetypen), aber keine Implementierung:
type Shaper interface {
Area() float64
}Jeder Typ, der alle Methoden einer Schnittstelle implementiert, erfüllt automatisch diesen Schnittstellenvertrag.
Probier es selbst
package main
import "fmt"
func main() {
// Eingabe lesen
var action string
fmt.Scanln(&action)
// TODO: Definieren Sie hier Ihr MediaPlayer-Interface
// TODO: Schreiben Sie unten Ihren Code, um die Aktion zu verarbeiten und die erforderliche Ausgabe auszugeben
// Ergebnis ausgeben
// Denken Sie daran, im Format auszugeben: "MediaPlayer interface requires: [MethodName]() string"
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittener Kontrollfluss
Switch mit `fallthrough`Abbrechen von verschachtelten SchleifenFortsetzen einer bestimmten SchleifeDie `goto`-AnweisungZusammenfassung – Fortgeschrittene Schleifensteuerung4Projekt: Einfache Aufgabenliste
Projekt-SetupEine Aufgabe hinzufügen2Structs und Methoden
Methoden für Structs definierenValue ReceiverPointer ReceiverReceiver auswählenMethoden vs. FunktionenZusammenfassung – Struct-Verhalten5Maps im Detail
Maps von StructsPointer als Map-WertePrüfen auf Nil-MapsMaps vergleichenZusammenfassung – Wortfrequenz-Zähler8Projekt: Einfache Bestandsverwaltung
ProjektübersichtLagerbestand prüfen11Abschlussherausforderungen
Einfache KontaktlisteEinfacher Zahlen-ValidatorSammler für eindeutige Elemente3Interfaces (Die Grundlagen)
Was ist ein Interface?Ein Interface definierenEin Interface implementierenInterface-Typen verwendenLeeres InterfaceType AssertionsType SwitchZusammenfassung – Formen und Verhalten