Maison > développement back-end > Golang > Comment puis-je saisir correctement Assert une tranche de valeurs d'interface dans Go ?

Comment puis-je saisir correctement Assert une tranche de valeurs d'interface dans Go ?

Susan Sarandon
Libérer: 2024-12-16 06:38:15
original
792 Les gens l'ont consulté

How Can I Correctly Type Assert a Slice of Interface Values in Go?

Type affirmant une tranche de valeurs d'interface

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 taper 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)
Copier après la connexion

Vous pouvez rencontrer l'erreur suivante :

invalid type assertion: args.([]Symbol) (non-interface type []Node on left)
Copier après la connexion

Cette erreur se produit car un slice, comme []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) }
Copier après la connexion

Ce code crée une nouvelle tranche de valeurs de symboles, de symboles et parcourt la tranche args, convertissant chaque élément en symbole à l'aide d'une assertion de type. Cette conversion manuelle garantit que chaque élément de la tranche résultante est conforme au type souhaité, fournissant la fonctionnalité souhaitée sans avoir besoin d'assertions de type invalides.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal