En programmation, il est courant de rencontrer des situations où vous devez taper affirmer une tranche de valeurs d'interface. Cependant, cela peut parfois conduire à des erreurs. Examinons les raisons pour lesquelles l'affirmation d'une tranche de valeurs d'interface n'est pas toujours réalisable.
Lorsque vous essayez de saisir assert sur un type spécifique, tel que []Symbol, à partir d'une tranche de valeurs d'interface, []Node , comme dans l'exemple fourni :
args.([]Symbol)
Vous pouvez rencontrer l'erreur suivante :
invalid type assertion: args.([]Symbol) (non-interface type []Node on left)
Cette erreur survient car une tranche, telle que []Node, n'est pas un type d'interface, contrairement à Node lui-même. Une tranche possède son propre type distinct avec son propre ensemble de comportements et de méthodes. Par conséquent, il lui manque la fluidité et l'adaptabilité d'une interface, qui permet au type sous-jacent de changer de manière dynamique.
Bien qu'il puisse sembler pratique de traiter une tranche de valeurs d'interface comme une interface, cela viole fondamentalement le concept de typage. . Dans l'exemple ci-dessus, l'intention est de convertir les arguments de la tranche en une tranche de valeurs de symboles. Cependant, étant donné que args est une tranche de valeurs de nœud, une assertion de type simple ne peut pas être effectuée.
Pour gérer correctement cette situation, vous pouvez utiliser une approche alternative :
symbols := make([]Symbol, len(args)) for i, arg := range args { symbols[i] = arg.(Symbol) }
Ce code crée une nouvelle tranche de valeurs de symboles, de symboles et parcourt la tranche d'arguments, convertissant chaque élément en un Symbole utilisant une assertion de type. Cette conversion manuelle garantit que chaque élément de la tranche résultante est conforme au type souhaité, fournissant ainsi la fonctionnalité souhaitée sans avoir besoin d'assertions de type non valides.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3