Maison >développement back-end >Golang >Comment résoudre l'erreur « type récursif invalide » lors de l'utilisation de types récursifs dans Go Structs ?

Comment résoudre l'erreur « type récursif invalide » lors de l'utilisation de types récursifs dans Go Structs ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-01 11:25:13689parcourir

How to Resolve the

Type récursif dans une structure en Go

La création de structures de données avec des types récursifs peut conduire à l'erreur "type récursif invalide" dans Go. Prenons le cas de la définition d'une structure Environment :

type Environment struct {
    parent Environment
    symbol string
    value  RCFAEValue
}

Ce code entraîne l'erreur car le compilateur ne peut pas déterminer la taille de l'Environnement. Le champ parent lui-même contient un Environnement, conduisant à une régression infinie.

Pour résoudre ce problème, l'Environnement doit être modifié pour utiliser un pointeur vers un autre Environnement au lieu de l'intégrer directement :

type Environment struct {
    parent *Environment // note that this is now a pointer
    symbol string
    value  RCFAEValue
}

La taille d'un pointeur est connue, contrairement à une structure auto-référencée.

Lors de la création d'un Environnement, la nouvelle syntaxe reflète le pointeur changement :

Environment{&fun_Val.ds, fun_Val.param, exp.arg_exp.interp(env)}

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