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
Patricia Arquetteoriginal
2024-12-02 17:52:11174parcourir

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
}

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
}

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)}

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!

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