Menu
CoddyTech

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. Go hat jedoch eine spezielle Schnittstelle, die unglaublich flexibel ist: die leere Schnittstelle, geschrieben als interface{}. Seit Go 1.18 kannst du sie auch als any schreiben, einem eingebauten Alias, der genau dasselbe wie interface{} bedeutet.

Die leere Schnittstelle hat keinerlei Methodenanforderungen, was bedeutet, dass jeder Typ in Go sie 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

Dadurch ist interface{} äußerst nützlich, wenn du mit Daten unbekannten oder unterschiedlichen Typs arbeiten musst. Das kann vorkommen, wenn du Konfigurationsdateien einliest, Benutzereingaben verarbeitest oder mit APIs arbeitest, die je nach Situation unterschiedliche Datentypen zurückgeben.

Da das leere Interface jedoch jeden Typ enthalten kann, musst du oft erst feststellen, welcher Typ tatsächlich darin gespeichert ist, bevor du den Wert sinnvoll verwenden kannst. Hier kommen Typzusicherungen und Typswitches (die du als Nächstes kennenlernen wirst) als wichtige Werkzeuge für den sicheren Umgang mit Werten vom Typ interface{} ins Spiel.

challenge icon

Aufgabe

Einfach

In dieser Herausforderung übst du den Umgang mit der leeren Schnittstelle, 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:

    "int", "string", "bool" oder "slice")
  • Eine Zeichenfolge, 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{} übernimmt und Informationen über den Wert ausgibt
  2. Den Wert anhand der Eingabe für den Datentyp in den entsprechenden Go-Typ umzuwandeln:
    • Für "int": in eine Ganzzahl umwandeln
    • Für "string": als Zeichenfolge verwenden
    • Für "bool": in einen booleschen Wert umwandeln
    • Für "slice": durch Kommas getrennte Werte in einen Slice aus Ganzzahlen umwandeln
  3. Die Funktion processData mit dem umgewandelten Wert aufrufen
  4. Innerhalb von processData den Wert und seinen Typ im folgenden Format ausgeben: "Value: [value], Type: [type]"

Bei der Slice-Eingabe sollte eine durch Kommas getrennte Zeichenfolge wie "1,2,3" in []int{1, 2, 3} umgewandelt werden. Die Funktion sollte mit jedem Typ funktionieren, da sie interface{} akzeptiert. Damit wird gezeigt, wie die leere Schnittstelle Werte beliebigen Typs aufnehmen kann. Verwende fmt.Printf mit den Formatverben %v und %T, um den Wert beziehungsweise den Typ anzuzeigen.

Probier es selbst

package main

import (
	"fmt"
)

func main() {
	// Eingabe einlesen
	var dataType string
	var valueStr string
	fmt.Scanln(&dataType)
	fmt.Scanln(&valueStr)
	
	// TODO: Schreibe deinen Code unten
	// 1. Erstelle die Funktion processData, die interface{} akzeptiert
	// 2. Konvertiere valueStr anhand von dataType in den passenden 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