Maison > développement back-end > Golang > Comment résoudre les erreurs de « type récursif invalide » dans les définitions Go Struct ?

Comment résoudre les erreurs de « type récursif invalide » dans les définitions Go Struct ?

DDD
Libérer: 2024-12-31 01:31:09
original
166 Les gens l'ont consulté

How to Resolve

Résolution du « type récursif invalide » dans Go Struct pour l'implémentation de l'interpréteur

Dans Go, lorsque vous tentez de définir une structure avec un type récursif, telle qu'une structure d'environnement avec un champ parent qui fait référence à son propre type, vous pouvez rencontrer l'erreur « type récursif non valide ». Voici comment résoudre ce problème et comprendre la raison sous-jacente :

Types et pointeurs récursifs

Dans Go, une structure qui fait directement référence à son propre type empêchera le compilateur de déterminer la taille. de la structure. Pour résoudre ce problème, nous devons utiliser un pointeur vers la structure au lieu d'inclure directement la structure.

Struct d'environnement modifié

La version corrigée suivante de la structure d'environnement utilise un pointeur vers son parent field :

type Environment struct {
    parent *Environment // note that this is now a pointer
    symbol string
    value  RCFAEValue
}
Copier après la connexion

En utilisant un pointeur, nous permettons au compilateur de déterminer la taille de la structure puisque la taille d'un pointeur est prédéfini.

Création d'environnement

Lors de la création d'un nouvel environnement, nous devons transmettre un pointeur vers l'environnement parent au lieu de l'environnement lui-même :

Environment{&fun_Val.ds, fun_Val.param, exp.arg_exp.interp(env)}
Copier après la connexion

Cela garantit que nous utilisons le type correct et que la structure est valide.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal