Maison > développement back-end > Golang > Comment saisir en toute sécurité une assertion à partir d'une tranche de valeurs d'interface dans Go ?

Comment saisir en toute sécurité une assertion à partir d'une tranche de valeurs d'interface dans Go ?

Mary-Kate Olsen
Libérer: 2024-12-22 06:14:14
original
901 Les gens l'ont consulté

How to Safely Type Assert from a Slice of Interface Values in Go?

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

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!

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