Ein Interface definieren
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 13 von 68.
Nachdem du nun konzeptionell verstanden hast, was Interfaces sind, lernen wir, wie man eines in Go tatsächlich definiert. Ein Interface wird mit dem Schlüsselwort interface definiert, gefolgt von einer Reihe von Methodensignaturen in geschweiften Klammern.
Hier ist die grundlegende Syntax zum Definieren eines Interfaces:
type InterfaceName interface {
MethodName() ReturnType
AnotherMethod(parameter Type) ReturnType
}Beachte, dass eine Schnittstelle nur Methodensignaturen enthält – den Methodennamen, die Parameter und die Rückgabetypen –, aber keine Implementierung. Die Schnittstelle legt nicht fest, wie diese Methoden funktionieren sollen, sondern nur, welche Methoden vorhanden sein müssen.
Zum Beispiel würdest du ein einfaches Shaper-Interface so definieren, dass jeder implementierende Typ über eine Area-Methode verfügen muss:
type Shaper interface {
Area() float64
}Diese Schnittstelle legt einen Vertrag fest: Jeder Typ, der als Shaper gelten soll, muss über eine Area-Methode verfügen, die keine Parameter entgegennimmt und einen float64 zurückgibt. Der Schnittstelle ist egal, um welchen Typ es sich handelt oder wie er die Fläche berechnet – wichtig ist nur, dass die Methode mit der richtigen Signatur vorhanden ist.
Aufgabe
EinfachIn dieser Herausforderung übst du, Schnittstellen in Go zu definieren, indem du ein einfaches Mediaplayer-System erstellst. Du definierst eine Schnittstelle, die einen Vertrag für verschiedene Arten von Mediengeräten festlegt.
Du erhältst eine Eingabe:
- Eine Zeichenfolge, die eine Medienaktion darstellt (z. B.
"play","pause"oder"stop")
Deine Aufgabe ist es:
- Eine Schnittstelle namens
MediaPlayermit drei Methodensignaturen zu definieren:Play(), die eine Zeichenfolge zurückgibtPause(), die eine Zeichenfolge zurückgibtStop(), die eine Zeichenfolge zurückgibt
- Abhängig von der Eingabeaktion die entsprechende Methodensignatur aus deiner
MediaPlayer-Schnittstelle im Format"MediaPlayer interface requires: [MethodName]() string"auszugeben
Dieses Programm verwendet MediaPlayer noch nicht, und das ist in Ordnung: Go kompiliert eine Schnittstelle auch dann, wenn kein Typ sie implementiert. Die Ausgaben geben einfach die Methodensignatur an, die deine Schnittstelle für die jeweilige Aktion verlangt. In der nächsten Lektion erstellst du einen Typ, der MediaPlayer implementiert, und rufst seine Methoden auf.
Die Methodennamen müssen großgeschrieben (exportiert) sein, da sie Teil einer Schnittstellendefinition sind. Gib für die Eingabe "play" "MediaPlayer interface requires: Play() string" aus, für "pause" "MediaPlayer interface requires: Pause() string" und für "stop" "MediaPlayer interface requires: Stop() string".
Bei dieser Herausforderung geht es um das grundlegende Konzept, Schnittstellen mit Methodensignaturen zu definieren und damit den Vertrag festzulegen, den jeder implementierende Typ erfüllen muss.
Probier es selbst
package main
import "fmt"
func main() {
// Eingabe einlesen
var action string
fmt.Scanln(&action)
// TODO: Definiere hier dein MediaPlayer-Interface
// TODO: Schreibe unten deinen Code, um die action zu verarbeiten und die erforderliche Ausgabe auszugeben
// Ergebnis ausgeben
// Denke daran, die Ausgabe in diesem 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Übe selbstständig: Online-Go-Compiler