In Go kann die Definition einer Struktur mit einem rekursiven Typ zu einem „ungültigen“ Ergebnis führen Fehler „Rekursiver Typ“. Dieser Fehler tritt auf, wenn eine Struktur ein Feld desselben Typs wie die Struktur selbst enthält.
Zum Beispiel ist die folgende Strukturdefinition ungültig:
type Environment struct { parent Environment symbol string value RCFAEValue }
Der Fehler tritt auf, weil der Compiler die Größe der Struktur nicht bestimmen kann. Die Größe eines Zeigers ist bekannt, aber die Größe einer Struktur, die sich selbst enthält, ist unbekannt.
Um dieses Problem zu beheben, müssen Sie das übergeordnete Feld zu einem Zeiger machen:
type Environment struct { parent *Environment // note that this is now a pointer symbol string value RCFAEValue }
Dadurch wird sichergestellt, dass die Größe der Umgebungsstruktur bekannt ist und der Compiler mit der Kompilierung fortfahren kann.
Nachdem Sie die Strukturdefinition aktualisiert haben, können Sie eine Umgebungsstruktur wie folgt erstellen:
Environment{&fun_Val.ds, fun_Val.param, exp.arg_exp.interp(env)}
Durch die Verwendung des &-Operators erhalten Sie die Adresse der Variable fun_Val.ds und weisen diese zu Fügen Sie es dem übergeordneten Feld hinzu, das vom Typ *Environment.
istDas obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „Ungültiger rekursiver Typ' in Go-Strukturen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!