Résoudre l'erreur Golang : assertion de type invalide : 'x'.(T) (type U sans interface à gauche)
Avant-propos :
Dans le développement Golang, l'utilisation de l'assertion de type est une technologie courante, utilisez Convertit une interface tapez la valeur sur un type de béton spécifié. Cependant, lors de l'utilisation d'assertions de type, vous rencontrerez parfois une erreur : assertion de type non valide : 'x'.(T) (type U non-interface à gauche). Cet article détaillera les raisons de cette erreur et proposera des solutions.
Contexte du problème :
Dans Golang, la syntaxe de l'assertion de type est très simple, généralement écrite sous la forme : value.(Type), où value est une valeur d'un type d'interface et Type est un type spécifique. L'assertion de type est sûre lorsque le type sous-jacent de la valeur est le même que Type ou que Type est une interface du type sous-jacent de la valeur. Cependant, lorsque le type sous-jacent de Type est incompatible avec la valeur, l'erreur ci-dessus se produit.
Analyse du problème :
Tout d'abord, regardons un exemple simple :
package main import "fmt" func main() { var x int = 10 y := x.(float64) fmt.Println(y) }
Dans le code ci-dessus, la variable x est une valeur de type int. Lors de l'utilisation de l'assertion de type pour convertir x en type float64, l'erreur ci-dessus sera déclenchée. Étant donné que le type int et le type float64 sont incompatibles, cette assertion de type n'est pas valide.
Solution :
Pour le problème ci-dessus, nous pouvons le résoudre des manières suivantes :
Dans l'exemple ci-dessus, nous essayons de convertir une valeur de type int en type float64. Pour résoudre ce problème, vous pouvez déclarer directement x comme type float64 au lieu du type int. Le code modifié est le suivant :
package main import "fmt" func main() { var x float64 = 10 y := x.(float64) fmt.Println(y) }
Si nous avons vraiment besoin de convertir une valeur en un autre type, nous pouvons utiliser l'opérateur de conversion de type pour convertir. Le code modifié est le suivant :
package main import "fmt" func main() { var x int = 10 y := float64(x) fmt.Println(y) }
Dans l'exemple ci-dessus, float64(x) est utilisé pour convertir la valeur x de type int en type float64.
Si vous n'êtes pas sûr qu'une assertion de type réussira, vous pouvez utiliser le mode ok pour éviter le rapport d'erreurs. Un exemple est le suivant :
package main import "fmt" func main() { var x interface{} = 10 if y, ok := x.(float64); ok { fmt.Println(y) } else { fmt.Println("无法转换为float64类型") } }
Dans l'exemple ci-dessus, nous déclarons x comme type d'interface vide et utilisons une instruction if pour déterminer si l'assertion de type réussit. En cas de succès, imprimez la valeur convertie ; en cas d'échec, imprimez un message d'invite.
Résumé :
Dans Golang, les assertions de type peuvent être utilisées pour convertir une valeur d'un type d'interface en un type concret spécifié. Cependant, lorsque le type sous-jacent est incompatible avec le type à convertir, une erreur sera déclenchée : assertion de type invalide : 'x'.(T) (type U non-interface à gauche). Nous pouvons éviter cette erreur en utilisant le type correct, la conversion de type ou l'assertion de type en mode ok.
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!