Middle
Waarom kan een lege interface in Go naar elk type worden geconverteerd?
sobes.tech AI
Antwoord van AI
De lege interface interface{} bevat geen methoden. Elke type in Go kan voldoen aan een interface die geen methoden vereist. Daarom kan de waarde van elk type worden toegewezen aan een variabele van het type interface{} of worden doorgegeven aan een functie die interface{} accepteert. In wezen is interface{} een container voor een waarde van elk type, die zowel de waarde zelf als het type ervan opslaat.
package main
import "fmt"
func main() {
var i interface{} // Declareer een variabele van een lege interface
i = 42 // Wijs een int toe
fmt.Printf("Waarde: %v, Type: %T\n", i, i)
i = "hallo" // Wijs een string toe
fmt.Printf("Waarde: %v, Type: %T\n", i, i)
i = true // Wijs een bool toe
fmt.Printf("Waarde: %v, Type: %T\n", i, i)
i = struct{}{} // Wijs een lege structuur toe
fmt.Printf("Waarde: %v, Type: %T\n", i, i)
}
Conversie van interface{} naar een specifiek type is mogelijk met behulp van type assertion of een type switch.
package main
import "fmt"
func main() {
var i interface{} = "wereld"
// Type assertion
s, ok := i.(string) // controleer of de waarde een string is
if ok {
fmt.Println("Type assertion geslaagd:", s)
} else {
fmt.Println("Type assertion mislukt")
}
// Type switch
switch v := i.(type) {
case int:
fmt.Println("Type is int, waarde:", v)
case string:
fmt.Println("Type is string, waarde:", v)
default:
fmt.Println("Onbekend type")
}
}