Menu
Coddy logo textTech

Leeres Interface

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

Bisher hast du mit Schnittstellen gearbeitet, die bestimmte Methoden erfordern, aber Go hat eine besondere Schnittstelle, die unglaublich flexibel ist: die leere Schnittstelle, geschrieben als interface{}.

Das leere Interface stellt überhaupt keine Anforderungen an Methoden, was bedeutet, dass jeder Typ in Go es automatisch erfüllt. Da jeder Typ (mindestens) null Methoden implementiert, kann jeder Typ einer interface{}-Variablen zugewiesen werden:

var anything interface{}
anything = 42        // int
anything = "hello"   // string
anything = true      // bool
anything = []int{1, 2, 3}  // slice

Das macht interface{} äußerst nützlich, wenn du mit Daten unbekannten oder unterschiedlichen Typs arbeiten musst. Das kann dir beim Lesen von Konfigurationsdateien, bei der Verarbeitung von Benutzereingaben oder bei der Arbeit mit APIs begegnen, die je nach Situation unterschiedliche Datentypen zurückgeben.

Da das leere Interface jedoch jeden Typ enthalten kann, musst du häufig feststellen, welcher Typ tatsächlich darin gespeichert ist, bevor du den Wert sinnvoll verwenden kannst. Hier werden Typassertionen und Typswitches (die du als Nächstes kennenlernen wirst) zu unverzichtbaren Werkzeugen für den sicheren Umgang mit interface{}-Werten.

challenge icon

Aufgabe

Einfach

In dieser Aufgabe übst du die Arbeit mit dem leeren Interface, indem du einen Datenprozessor erstellst, der verschiedene Werttypen verarbeiten kann. Du erstellst eine Funktion, die einen Parameter vom Typ interface{} akzeptiert und verschiedene Datentypen verarbeitet.

Du erhältst zwei Eingaben:

  • Eine Zeichenkette, die den Datentyp darstellt (z. B. "int", "string", "bool" oder "slice")
  • Eine Zeichenkette, die den tatsächlichen Wert darstellt (z. B. "42", "hello", "true" oder "1,2,3")

Deine Aufgabe ist es:

  1. Eine Funktion namens processData zu erstellen, die einen Parameter vom Typ interface{} entgegennimmt und Informationen über den Wert ausgibt
  2. Die Wertzeichenkette basierend auf der Eingabe des Datentyps in den entsprechenden Go-Typ umzuwandeln:
    • Für "int": in eine Ganzzahl umwandeln
    • Für "string": als Zeichenkette verwenden
    • Für "bool": in einen booleschen Wert umwandeln
    • Für "slice": durch Kommas getrennte Werte in ein Slice von Ganzzahlen umwandeln
  3. Die Funktion processData mit dem umgewandelten Wert aufzurufen
  4. Innerhalb von processData den Wert und seinen Typ im folgenden Format auszugeben: "Value: [value], Type: [type]"

Bei der Slice-Eingabe sollte eine durch Kommas getrennte Zeichenkette wie "1,2,3" in []int{1, 2, 3} umgewandelt werden. Die Funktion sollte mit jedem Typ funktionieren, da sie interface{} akzeptiert, und so demonstrieren, dass das leere Interface Werte jedes Typs aufnehmen kann. Verwende fmt.Printf mit den Formatverben %v und %T, um den Wert bzw. den Typ anzuzeigen.

Probier es selbst

package main

import (
	"fmt"
)

func main() {
	// Eingabe lesen
	var dataType string
	var valueStr string
	fmt.Scanln(&dataType)
	fmt.Scanln(&valueStr)
	
	// TODO: Schreibe deinen Code darunter
	// 1. Erstelle die processData-Funktion, die interface{} akzeptiert
	// 2. Konvertiere valueStr basierend auf dataType in den entsprechenden Typ
	// 3. Rufe processData mit dem konvertierten Wert auf
	
}
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

Übe selbstständig: Online-Go-Compiler