Middle
Miért lehet a Go nyelvben az üres interfészt bármilyen típusra konvertálni?
sobes.tech MI
Válasz az MI-től
Üres interfész interface{} nem tartalmaz metódusokat. Bármilyen típus Go-ban kielégítheti a metódusokat nem igénylő interfészt. Ezért bármilyen típus értéke hozzárendelhető az interface{} típusú változóhoz vagy átadható olyan függvénynek, amely elfogadja az interface{}-t. Lényegében az interface{} egy tároló minden típus értékéhez, amely tárolja magát az értéket és annak típusát.
package main
import "fmt"
func main() {
var i interface{} // Üres interfész változó deklarálása
i = 42 // int érték hozzárendelése
fmt.Printf("Érték: %v, Típus: %T\n", i, i)
i = "szia" // string érték hozzárendelése
fmt.Printf("Érték: %v, Típus: %T\n", i, i)
i = true // bool érték hozzárendelése
fmt.Printf("Érték: %v, Típus: %T\n", i, i)
i = struct{}{} // üres struktúra hozzárendelése
fmt.Printf("Érték: %v, Típus: %T\n", i, i)
}
Az interface{}-ből konkrét típusra való átalakítás típus-állítással (type assertion) vagy típusváltással (type switch) lehetséges.
package main
import "fmt"
func main() {
var i interface{} = "világ"
// Típus-állítás
s, ok := i.(string) // ellenőrzi, hogy az érték string-e
if ok {
fmt.Println("Típus-állítás sikeres:", s)
} else {
fmt.Println("Típus-állítás sikertelen")
}
// Típusváltás
switch v := i.(type) {
case int:
fmt.Println("Típus: int, érték:", v)
case string:
fmt.Println("Típus: string, érték:", v)
default:
fmt.Println("Ismeretlen típus")
}
}