Maison > Article > développement back-end > Pourquoi est-ce que je reçois le message « Impossible de saisir une valeur non-interface » dans Go ?
Gestion des erreurs dans Go : résolution de "Impossible de saisir le commutateur sur une valeur non-interface"
Lorsque vous essayez d'implémenter l'assertion de type dans Go, vous peut rencontrer le message d'erreur : "Impossible de taper sur une valeur non-interface." Cette erreur se produit lorsque vous tentez d'effectuer un changement de type sur une valeur qui n'est pas un type d'interface.
Considérez l'extrait de code suivant :
package main import "fmt" import "strconv" 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") } }
Lors de l'exécution de ce code, vous rencontrerez le Erreur "Impossible de taper le commutateur sur une valeur non-interface". Pour résoudre ce problème, nous devons convertir la variable n en type interface{} avant d'effectuer le changement de type.
switch v := interface{}(n).(type)
Cette conversion convertit le type concret de n (*Number) en type d'interface interface{ }. Les interfaces dans Go agissent comme un contrat, permettant de stocker et d'accéder à n'importe quelle valeur via des méthodes courantes. En convertissant n en interface{}, nous pouvons ensuite effectuer le changement de type sur la valeur d'interface résultante.
Lorsque nous exécutons le code modifié, il imprimera avec succès "Stringer : 1", comme prévu. Cela démontre que l'assertion de type dans Go nécessite que la valeur soit un type d'interface, et la conversion en interface{} permet les commutateurs de type sur les valeurs non-interface.
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!