Assertion de type dans Go : résolution de « Impossible de saisir le commutateur sur une valeur non-interface »
Dans Go, l'assertion de type implique de vérifier si une valeur appartient à un type particulier. Lorsque vous rencontrez l'erreur « Impossible de saisir une valeur non-interface », cela signifie que la valeur vérifiée n'est pas une interface.
Considérez le code suivant :
type Stringer interface { String() string } type Number struct { v int } func (number *Number) String() string { return strconv.Itoa(number.v) } func main() { n := &Number{1} switch v := n.(type) { case Stringer: fmt.Println("Stringer:", v) default: fmt.Println("Unknown") } }
Ce code tente pour taper switch sur la valeur n, qui est de type *Number. Cependant, cela entraîne l'erreur « Impossible de taper sur une valeur non-interface ».
Pour résoudre ce problème, nous devons convertir n en une valeur d'interface avant d'effectuer l'assertion de type. En effet, la commutation de type ne peut être effectuée que sur les valeurs d'interface. Le code corrigé suivant le démontre :
switch v := interface{}(n).(type) { case Stringer: fmt.Println("Stringer:", v) default: fmt.Println("Unknown") }
En convertissant n en interface{}, nous permettons que le changement de type soit effectué sur la valeur d'interface résultante. Cela nous permet de vérifier avec succès si n est de type Stringer et d'imprimer le message correspondant.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!