Middle
Prečo je prázdne rozhranie v Go možné previesť na akýkoľvek typ?
sobes.tech AI
Odpoveď od AI
Prázdne rozhranie interface{} neobsahuje žiadne metódy. Akýkoľvek typ v Go môže spĺňať rozhranie, ktoré nevyžaduje žiadne metódy. Preto hodnotu akéhokoľvek typu možno priradiť premennej typu interface{} alebo ju odovzdať funkcii, ktorá prijíma interface{}. V podstate je interface{} kontajnerom pre hodnotu akéhokoľvek typu, ktorý uchováva ako hodnotu, tak jej typ.
package main
import "fmt"
func main() {
var i interface{} // Deklarujeme premennú prázdneho rozhrania
i = 42 // Priradíme int
fmt.Printf("Hodnota: %v, Typ: %T\n", i, i)
i = "ahoj" // Priradíme string
fmt.Printf("Hodnota: %v, Typ: %T\n", i, i)
i = true // Priradíme bool
fmt.Printf("Hodnota: %v, Typ: %T\n", i, i)
i = struct{}{} // Priradíme prázdnu štruktúru
fmt.Printf("Hodnota: %v, Typ: %T\n", i, i)
}
Prevod z interface{} na konkrétny typ je možný pomocou tvrdenia o type (type assertion) alebo switcha o type (type switch).
package main
import "fmt"
func main() {
var i interface{} = "svet"
// Tvrdenie o type
s, ok := i.(string) // kontroluje, či je hodnota string
if ok {
fmt.Println("Úspešné tvrdenie o type:", s)
} else {
fmt.Println("Neúspešné tvrdenie o type")
}
// Switch o type
switch v := i.(type) {
case int:
fmt.Println("Typ je int, hodnota:", v)
case string:
fmt.Println("Typ je string, hodnota:", v)
default:
fmt.Println("Neznámy typ")
}
}