Heim > Backend-Entwicklung > Golang > Warum wird mein Go-Strukturfeld nach einem Methodenaufruf zurückgesetzt?

Warum wird mein Go-Strukturfeld nach einem Methodenaufruf zurückgesetzt?

DDD
Freigeben: 2024-11-15 05:48:02
Original
367 Leute haben es durchsucht

Why Does My Go Struct Field Revert After a Method Call?

Umkehren von Strukturfeldern

Im bereitgestellten Go-Code wird ein seltsames Verhalten beobachtet, bei dem sich ein Strukturfeld innerhalb einer Methode ändert, aber zu seinem ursprünglichen Zustand zurückkehrt Originalwert bei späterer Überprüfung. Dieses Problem ergibt sich aus der Tatsache, dass die Struktur nach Wert statt nach Zeiger übergeben wird.

Erklärung:

In der sendMessage-Methode der TVManager-Struktur wird eine Methode sendCommand einer Connector-Struktur mit einem Wert der TVManager-Struktur aufgerufen. Wenn eine Struktur als Wert übergeben wird, wird eine Kopie der Struktur erstellt und anstelle eines Verweises auf die ursprüngliche Struktur übergeben.

In der sendCommand-Methode der MockConnector-Struktur werden die Felder von Die Connector-Struktur (z. B. last_command, value) wird geändert. Da der Connector jedoch als Wert übergeben wird, werden die Änderungen nur auf die Kopie der Struktur angewendet, nicht auf die ursprüngliche.

Um dieses Problem zu beheben, muss die Connector-Struktur in der Die sendCommand-Methode sollte per Zeiger und nicht als Wert übergeben werden. Dadurch kann die Methode die ursprüngliche Connector-Struktur ändern und nicht eine Kopie.

Lösung:

Ersetzen:

Durch:

Zusätzliche Überlegungen:

  • Es wird generell nicht empfohlen, „this“ als Empfängernamen in Go zu verwenden.
  • Wenn eine Methode eines bestimmten Typs einen Zeigerempfänger erfordert, empfiehlt es sich, Zeigerempfänger für alle Methoden dieses Typs zu verwenden.

Das obige ist der detaillierte Inhalt vonWarum wird mein Go-Strukturfeld nach einem Methodenaufruf zurückgesetzt?. 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