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")
}
}