Assertion de type à partir d'une tranche de valeurs d'interface
Dans Go, tentative de saisie d'une assertion à partir d'une tranche de valeurs d'interface, telle que [] Nœud vers []Symbol, peut entraîner une erreur. Alors que Symbol implémente l'interface Node, la tranche []Node n'est pas un type d'interface.
Le message d'erreur "assertion de type invalide : args.([]Symbol) (type non-interface []Node à gauche )," indique que la tranche de valeurs d'interface ([]Node) ne peut pas être directement attribuée à un type d'interface ([]Symbole).
Raison
Une tranche est un type distinct, sans interface, avec son propre ensemble de méthodes. Il n’hérite pas des méthodes des éléments qu’il contient, contrairement à une interface. Par conséquent, cela n'a pas de sens de supposer qu'une tranche de valeurs d'interface est une interface elle-même.
Solution
Pour taper correctement assert dans cette situation, vous pouvez utilisez une boucle pour convertir chaque élément de la tranche dans le type souhaité. Par exemple, le code suivant :
symbols := make([]Symbol, len(args)) for i, arg := range args { symbols[i] = arg.(Symbol) } fixed, rest := parseFormals(symbols)
Crée une nouvelle tranche de valeurs de symboles, de symboles et parcourt la tranche d'arguments, convertissant chaque élément en un type de symbole. Vous pouvez ensuite utiliser des symboles pour un traitement ultérieur.
N'oubliez pas que les assertions de type ne doivent être utilisées que lorsque vous êtes absolument certain que l'assertion réussira. Sinon, une panique peut survenir au moment de l'exécution.
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!