Maison > développement back-end > Golang > Comment résoudre l'erreur « Type récursif invalide » dans Go Structs ?

Comment résoudre l'erreur « Type récursif invalide » dans Go Structs ?

Patricia Arquette
Libérer: 2024-12-02 17:52:11
original
129 Les gens l'ont consulté

How to Resolve the

Type récursif invalide dans une structure en Go

Énoncé du problème

En Go, définir une structure avec un type récursif peut entraîner un "invalide erreur de type récursif". Cette erreur se produit lorsqu'une structure contient un champ du même type que la structure elle-même.

Par exemple, la définition de structure suivante n'est pas valide :

type Environment struct {
    parent Environment
    symbol string
    value  RCFAEValue
}
Copier après la connexion

Cause

L'erreur se produit car le compilateur ne peut pas déterminer la taille de la structure. La taille d'un pointeur est connue, mais la taille d'une structure qui la contient est inconnue.

Solution

Pour résoudre ce problème, vous devez faire du champ parent un pointeur :

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

Cela garantit que la taille de la structure Environment est connue et permet au compilateur de procéder à la compilation.

Création du Environnement

Après avoir mis à jour la définition de la structure, vous pouvez créer une structure d'environnement comme suit :

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

En utilisant l'opérateur &, vous obtenez l'adresse de la variable fun_Val.ds et lui attribuez dans le champ parent, qui est de type *Environnement.

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