Heim > Backend-Entwicklung > Golang > Warum wird mein Go-Strukturfeld bei einer Änderung auf seinen ursprünglichen Wert zurückgesetzt?

Warum wird mein Go-Strukturfeld bei einer Änderung auf seinen ursprünglichen Wert zurückgesetzt?

Linda Hamilton
Freigeben: 2024-11-15 15:45:02
Original
855 Leute haben es durchsucht

Why Does My Go Struct Field Revert to Its Original Value When Modified?

Strukturfeldumkehr in Go

Beim Versuch, ein Feld in einer Struktur innerhalb eines Go-Programms zu ändern, kann es zu einem Szenario kommen, in dem die Das Feld scheint auf seinen ursprünglichen Wert zurückzukehren. Dieses Problem entsteht aufgrund der Art und Weise, wie Strukturen in Go als Wert übergeben werden.

In Ihrem Code verfügt die MockConnector-Struktur über zwei Felder: last_command und value. Die sendCommand-Methode von MockConnector ändert diese Felder. Wenn Sie jedoch manager.sendMessage aus der TVManager-Struktur aufrufen, übergeben Sie die Connector-Instanz als Wert. Das bedeutet, dass sendCommand eine Kopie der Connector-Struktur erhält und keinen Verweis auf das Original.

Um dieses Problem zu beheben, müssen Sie Zeiger auf die beteiligten Strukturen verwenden. Indem Sie einen Zeiger auf eine Struktur übergeben, übergeben Sie einen Verweis auf die tatsächliche Struktur im Speicher. Dadurch können Sie die Felder der Struktur direkt ändern.

Korrigierter Code:

func (this *MockConnector) sendCommand(payload map[string]string) {
    fmt.Println("0", this)
    this.last_command = payload
    this.value = true
    fmt.Println("0", this)
}
Nach dem Login kopieren

Durch Ändern der sendCommand-Methode, um einen Zeiger auf die MockConnector-Struktur zu empfangen, Sie ändern jetzt die tatsächliche Connector-Instanz und nicht nur eine Kopie.

Empfängername:

Darüber hinaus gilt es als bewährte Vorgehensweise, die Verwendung dieses Namens als Empfängernamen in Go zu vermeiden Strukturmethoden. Verwenden Sie stattdessen einen aussagekräftigeren Namen, um den Empfängertyp anzugeben.

Konsistenter Methodensatz:

Wenn eine Methode in einer Struktur einen Zeigerempfänger erfordert, wird dies empfohlen Stellen Sie sicher, dass alle Methoden in dieser Struktur Zeigerempfänger verwenden. Dies stellt die Konsistenz des Methodensatzes sicher, unabhängig davon, ob der Empfänger ein Wert oder ein Zeiger ist.

Durch die Anwendung dieser Empfehlungen können Sie das Problem des Zurücksetzens von Feldwerten in Ihrem Go-Programm beseitigen.

Das obige ist der detaillierte Inhalt vonWarum wird mein Go-Strukturfeld bei einer Änderung auf seinen ursprünglichen Wert 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage