Sobes.tech
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")
	}
}