Lorsque vous essayez de saisir une tranche de valeurs d'interface, vous pouvez rencontrer une erreur similaire à :
invalid type assertion: args.([]Symbol) (non-interface type []Node on left)
Cette erreur se produit car les tranches sont des types distincts et sans interface. Pour comprendre pourquoi, examinons la nature des interfaces dans Go.
Les interfaces sont des types qui définissent un ensemble de méthodes qu'une valeur doit implémenter. Lorsque vous créez une variable d'un type d'interface, son type dynamique n'est pas fixe, ce qui lui permet de contenir des valeurs de n'importe quel type qui implémente l'interface.
Cependant, une tranche est une collection de valeurs d'un type spécifique, qui est固定 d'un seul type. Il n'a aucune méthode, ce qui en fait un type sans interface. Par conséquent, cela n'a aucun sens de supposer qu'une tranche de valeurs d'interface est également une interface.
Pour résoudre cette erreur, vous pouvez explicitement convertir les valeurs de la tranche en la valeur souhaitée tapez, comme dans le code suivant :
symbols := make([]Symbol, len(args)) for i, arg := range args { symbols[i] = arg.(Symbol) }
Ce code crée une nouvelle tranche du type souhaité et parcourt la tranche d'origine, convertissant chaque valeur en type souhaité. Cela vous permet d'utiliser les valeurs affirmées par type dans votre code sans rencontrer l'erreur d'assertion de type.
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!