Middle
De ce interfața goală în Go poate fi convertită în orice tip?
sobes.tech AI
Răspuns de la AI
Interfața goală interface{} nu conține metode. Orice tip în Go poate satisface o interfață care nu necesită metode. Prin urmare, valoarea oricărui tip poate fi atribuită unei variabile de tip interface{} sau transmisă unei funcții care acceptă interface{}. În esență, interface{} este un container pentru o valoare de orice tip, stocând atât valoarea, cât și tipul acesteia.
package main
import "fmt"
func main() {
var i interface{} // Declarăm o variabilă de interfață goală
i = 42 // Atribuim un int
fmt.Printf("Valoare: %v, Tip: %T\n", i, i)
i = "salut" // Atribuim un string
fmt.Printf("Valoare: %v, Tip: %T\n", i, i)
i = true // Atribuim un bool
fmt.Printf("Valoare: %v, Tip: %T\n", i, i)
i = struct{}{} // Atribuim o structură goală
fmt.Printf("Valoare: %v, Tip: %T\n", i, i)
}
Conversia de la interface{} la un tip specific este posibilă prin afirmație de tip (type assertion) sau switch de tip (type switch).
package main
import "fmt"
func main() {
var i interface{} = "lume"
// Afirmare de tip
s, ok := i.(string) // verifică dacă valoarea este un string
if ok {
fmt.Println("Afirmare de tip reușită:", s)
} else {
fmt.Println("Afirmare de tip eșuată")
}
// Switch de tip
switch v := i.(type) {
case int:
fmt.Println("Tipul este int, valoare:", v)
case string:
fmt.Println("Tipul este string, valoare:", v)
default:
fmt.Println("Tip necunoscut")
}
}