Ein Interface implementieren
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 14 von 68.
Nachdem du nun weißt, wie man ein Interface definiert, wollen wir lernen, wie Go-Typen es tatsächlich implementieren. Das Wichtigste, was du verstehen musst, ist, dass Go eine implizite Implementierung verwendet – es ist kein spezielles Schlüsselwort und keine Deklaration erforderlich.
Wenn ein Typ über alle Methoden verfügt, die eine Schnittstelle erfordert, erfüllt er automatisch diese Schnittstelle. Du musst nicht ausdrücklich angeben, dass dein Typ die Schnittstelle implementiert – Go erkennt das für dich.
So funktioniert es mit der Shaper-Schnittstelle aus der vorherigen Lektion:
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14159 * c.Radius * c.Radius
}Da der Typ Circle über eine Area()-Methode verfügt, die einen float64 zurückgibt, implementiert er automatisch das Interface Shaper. Es ist nicht nötig, diese Beziehung ausdrücklich zu deklarieren – Go erkennt sie anhand der Übereinstimmung der Methodensignatur.
Dieser implizite Ansatz macht Go-Schnittstellen unglaublich flexibel. Jeder vorhandene Typ kann eine neue Schnittstelle erfüllen, solange er über die erforderlichen Methoden verfügt, selbst wenn die Schnittstelle erst erstellt wurde, nachdem der Typ geschrieben worden war.
Aufgabe
EinfachIn dieser Herausforderung übst du die Implementierung eines Interfaces, indem du ein einfaches Fahrzeugsystem erstellst. Du erstellst eine Car-Struktur, die durch Gos implizite Implementierung automatisch das Vehicle-Interface implementiert.
Du erhältst zwei Eingaben:
- Eine Zeichenkette, die die Marke des Fahrzeugs darstellt (z. B.
"Toyota") - Eine Zeichenkette, die die Geschwindigkeit des Fahrzeugs in km/h darstellt (z. B.
"120")
Deine Aufgabe ist es:
- Ein
Vehicle-Interface mit einer Methodensignatur zu definieren:GetInfo(), die eine Zeichenkette zurückgibt - Eine
Car-Struktur mit zwei Feldern zu definieren:Brand(string) undSpeed(int) - Die Methode
GetInfo()für dieCar-Struktur zu implementieren, die eine Zeichenkette im Format"Brand: [brand], Speed: [speed] km/h"zurückgibt - Die Eingaben zu analysieren, um eine
Car-Instanz zu erstellen - Die Methode
GetInfo()aufzurufen und das Ergebnis auszugeben
Denke daran, dass die Car-Struktur in Go automatisch das Vehicle-Interface implementiert, da sie über die erforderliche GetInfo()-Methode mit der korrekten Signatur verfügt. Es ist nicht nötig, ausdrücklich zu deklarieren, dass Car Vehicle implementiert – Go erkennt diese Beziehung implizit.
Probier es selbst
package main
import (
"fmt"
"strconv"
)
// TODO: 1. Definiere das Vehicle-Interface mit einer GetInfo() string-Methode
// TODO: 2. Definiere das Car-Struct mit den Feldern Brand (string) und Speed (int)
// TODO: 3. Implementiere die GetInfo()-Methode für Car
func main() {
// Eingabe lesen
var brand string
var speedStr string
fmt.Scanln(&brand)
fmt.Scanln(&speedStr)
// Geschwindigkeits-String in Ganzzahl umwandeln
speed, _ := strconv.Atoi(speedStr)
// TODO: 4. Erstelle eine Car-Instanz unter Verwendung von brand und speed, rufe dann GetInfo() auf
result := "" // Ersetze diese Zeile durch deine Implementierung
_ = brand
_ = speed
// Ergebnis ausgeben
fmt.Println(result)
}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