Sobes.tech
Middle

Warum kann eine leere Schnittstelle in Go in jeden Typ umgewandelt werden?

sobes.tech KI

Antwort von AI

Die leere Schnittstelle interface{} enthält keine Methoden. Jeder Typ in Go kann eine Schnittstelle erfüllen, die keine Methoden erfordert. Daher kann der Wert eines beliebigen Typs einer Variablen vom Typ interface{} zugewiesen oder an eine Funktion übergeben werden, die interface{} akzeptiert. Im Wesentlichen ist interface{} ein Container für einen Wert beliebigen Typs, der sowohl den Wert selbst als auch seinen Typ speichert.

package main

import "fmt"

func main() {
	var i interface{} // Deklarieren einer Variablen der leeren Schnittstelle

	i = 42            // Zuweisung eines int
	fmt.Printf("Wert: %v, Typ: %T\n", i, i)

	i = "hallo"     // Zuweisung eines Strings
	fmt.Printf("Wert: %v, Typ: %T\n", i, i)

	i = true        // Zuweisung eines bools
	fmt.Printf("Wert: %v, Typ: %T\n", i, i)

	i = struct{}{}  // Zuweisung einer leeren Struktur
	fmt.Printf("Wert: %v, Typ: %T\n", i, i)
}

Die Umwandlung in einen konkreten Typ aus interface{} ist mit Type Assertion oder Type Switch möglich.

package main

import "fmt"

func main() {
	var i interface{} = "Welt"

	// Type Assertion
	s, ok := i.(string) // Überprüfung, ob der Wert ein String ist
	if ok {
		fmt.Println("Type Assertion erfolgreich:", s)
	} else {
		fmt.Println("Type Assertion fehlgeschlagen")
	}

	// Type Switch
	switch v := i.(type) {
	case int:
		fmt.Println("Der Typ ist int, Wert:", v)
	case string:
		fmt.Println("Der Typ ist string, Wert:", v)
	default:
		fmt.Println("Unbekannter Typ")
	}
}