Middle
Pourquoi une interface vide en Go peut-elle être convertie en n'importe quel type?
sobes.tech IA
Réponse de l'IA
L'interface vide interface{} ne contient pas de méthodes. Tout type en Go peut satisfaire une interface qui ne requiert aucune méthode. Par conséquent, la valeur de n'importe quel type peut être assignée à une variable de type interface{} ou passée à une fonction acceptant interface{}. En substance, interface{} est un conteneur pour une valeur de n'importe quel type, stockant à la fois la valeur elle-même et son type.
package main
import "fmt"
func main() {
var i interface{} // Déclarons une variable d'interface vide
i = 42 // Assignons un int
fmt.Printf("Valeur : %v, Type : %T\n", i, i)
i = "bonjour" // Assignons un string
fmt.Printf("Valeur : %v, Type : %T\n", i, i)
i = true // Assignons un bool
fmt.Printf("Valeur : %v, Type : %T\n", i, i)
i = struct{}{} // Assignons une structure vide
fmt.Printf("Valeur : %v, Type : %T\n", i, i)
}
La conversion vers un type spécifique depuis interface{} est possible via assertion de type (type assertion) ou via un switch de type (type switch).
package main
import "fmt"
func main() {
var i interface{} = "monde"
// Assertion de type
s, ok := i.(string) // Vérifie si la valeur est une chaîne
if ok {
fmt.Println("Assertion de type réussie :", s)
} else {
fmt.Println("Échec de l'assertion de type")
}
// Switch de type
switch v := i.(type) {
case int:
fmt.Println("Le type est int, valeur :", v)
case string:
fmt.Println("Le type est string, valeur :", v)
default:
fmt.Println("Type inconnu")
}
}