Heim > Backend-Entwicklung > Golang > Wie behebe ich Fehler „Ungültiger rekursiver Typ' in Go-Strukturdefinitionen?

Wie behebe ich Fehler „Ungültiger rekursiver Typ' in Go-Strukturdefinitionen?

DDD
Freigeben: 2024-12-31 01:31:09
Original
174 Leute haben es durchsucht

How to Resolve

Auflösen von „Ungültiger rekursiver Typ“ in Go-Struktur für Interpreter-Implementierung

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:

Rekursive Typen und Zeiger

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.

Geänderte Umgebungsstruktur

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
}
Nach dem Login kopieren

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.

Umgebungserstellung

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)}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage