Maison >développement back-end >Golang >Comment saisir des tranches d'assertion de valeurs d'interface dans Go ?

Comment saisir des tranches d'assertion de valeurs d'interface dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-07 16:40:13852parcourir

How to Type Assert Slices of Interface Values in Go?

Type affirmant des tranches de valeurs d'interface

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.

La solution

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn