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

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

Patricia Arquette
Freigeben: 2024-12-02 17:52:11
Original
130 Leute haben es durchsucht

How to Resolve the

Ungültiger rekursiver Typ in einer Struktur in Go

Problemstellung

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

Ursache

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.

Lösung

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

Dadurch wird sichergestellt, dass die Größe der Umgebungsstruktur bekannt ist und der Compiler mit der Kompilierung fortfahren kann.

Erstellen der Umgebung

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

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.

ist

Das 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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage