Menu
Coddy logo textTech

Ein Interface implementieren

Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 14 von 68.

Nachdem Sie nun wissen, wie man ein Interface definiert, lassen Sie uns lernen, wie Go-Typen diese tatsächlich implementieren. Das Wichtigste, was es zu verstehen gilt, ist, dass Go eine implizite Implementierung verwendet – es ist kein spezielles Schlüsselwort oder eine Deklaration erforderlich.

Wenn ein Typ alle Methoden besitzt, die ein Interface erfordert, erfüllt er dieses Interface automatisch. Sie müssen nicht explizit angeben, dass Ihr Typ das Interface implementiert – Go findet das für Sie heraus.

So funktioniert es mit dem Shaper-Interface 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 Methode Area() verfügt, die einen float64 zurückgibt, implementiert er automatisch das Interface Shaper. Es ist nicht notwendig, diese Beziehung explizit zu deklarieren – Go erkennt sie anhand der Übereinstimmung der Methodensignatur.

Dieser implizite Ansatz macht Go-Interfaces unglaublich flexibel. Jeder bestehende Typ kann ein neues Interface erfüllen, solange er über die erforderlichen Methoden verfügt, selbst wenn das Interface erst nach dem Schreiben des Typs erstellt wurde.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

challenge icon

Aufgabe

Einfach

In dieser Herausforderung üben Sie die Implementierung eines Interfaces, indem Sie ein einfaches Fahrzeugsystem erstellen. Sie erstellen ein Car-Struct, das automatisch ein Vehicle-Interface durch die implizite Implementierung von Go implementiert.

Sie erhalten zwei Eingaben:

  • Einen String, der die Marke des Autos darstellt (z. B. "Toyota")
  • Einen String, der die Geschwindigkeit des Autos in km/h darstellt (z. B. "120")

Ihre Aufgabe ist es:

  1. Definieren Sie ein Vehicle-Interface mit einer Methodensignatur: GetInfo(), die einen String zurückgibt
  2. Definieren Sie ein Car-Struct mit zwei Feldern: Brand (string) und Speed (int)
  3. Implementieren Sie die GetInfo()-Methode für das Car-Struct, die einen String im Format "Brand: [brand], Speed: [speed] km/h" zurückgibt
  4. Parsen Sie die Eingaben, um eine Car-Instanz zu erstellen
  5. Rufen Sie die GetInfo()-Methode auf und geben Sie das Ergebnis aus

Denken Sie daran, dass in Go das Car-Struct automatisch das Vehicle-Interface implementiert, da es über die erforderliche GetInfo()-Methode mit der korrekten Signatur verfügt. Es ist nicht erforderlich, explizit zu deklarieren, dass Car das Vehicle-Interface implementiert – Go erkennt diese Beziehung implizit.

Spickzettel

Go verwendet eine implizite Implementierung für Interfaces – es ist kein spezielles Schlüsselwort oder eine Deklaration erforderlich.

Wenn ein Typ über alle Methoden verfügt, die ein Interface erfordert, erfüllt er dieses Interface automatisch:

type Circle struct {
    Radius float64
}

func (c Circle) Area() float64 {
    return 3.14159 * c.Radius * c.Radius
}

Da Circle über eine Methode Area() verfügt, die einen float64 zurückgibt, implementiert er automatisch das Shaper-Interface ohne explizite Deklaration.

Dieser implizite Ansatz macht Go-Interfaces flexibel – jeder bestehende Typ kann ein neues Interface erfüllen, solange er über die erforderlichen Methoden verfügt, selbst wenn das Interface erst nach dem Typ erstellt wurde.

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)
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf