In Go, wenn versucht wird, eine Struktur mit rekursivem Typ zu definieren, z. B. eine Umgebungsstruktur mit a Wenn Sie ein übergeordnetes Feld verwenden, das auf seinen eigenen Typ verweist, wird möglicherweise die Fehlermeldung „Ungültiger rekursiver Typ“ angezeigt. So lösen Sie dieses Problem und verstehen den zugrunde liegenden Grund:
In Go führt eine Struktur, die direkt auf ihren eigenen Typ verweist, dazu, dass der Compiler die Größe nicht bestimmen kann der Struktur. Um dieses Problem zu beheben, müssen wir einen Zeiger auf die Struktur verwenden, anstatt die Struktur direkt einzuschließen.
Die folgende korrigierte Version der Umgebungsstruktur verwendet einen Zeiger auf ihr übergeordnetes Element Feld:
type Environment struct { parent *Environment // note that this is now a pointer symbol string value RCFAEValue }
Durch die Verwendung eines Zeigers ermöglichen wir dem Compiler, die Größe der Struktur zu bestimmen, da die Größe eines Zeigers beträgt vordefiniert.
Beim Erstellen einer neuen Umgebung müssen wir einen Zeiger auf die übergeordnete Umgebung statt auf die Umgebung selbst übergeben:
Environment{&fun_Val.ds, fun_Val.param, exp.arg_exp.interp(env)}
Dadurch wird sichergestellt Wir verwenden den richtigen Typ und die Struktur ist gültig.
Das obige ist der detaillierte Inhalt vonWie behebe ich Fehler „Ungültiger rekursiver Typ' in Go-Strukturdefinitionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!