Warum wird mein Strukturfeld in Go unerwartet zurückgesetzt?

Susan Sarandon
Freigeben: 2024-11-17 07:15:03
Original
139 Leute haben es durchsucht

Why Does My Struct Field Revert Unexpectedly in Go?

Strukturfeld wird unerwartet zurückgesetzt

In Go werden Strukturen als Wert übergeben, was bedeutet, dass an einer Struktur innerhalb einer Funktion vorgenommene Änderungen nicht in der ursprünglichen Struktur widergespiegelt werden. Dies wird im bereitgestellten Code deutlich, wo ein Strukturfeld auf seinen ursprünglichen Wert zurückgesetzt wird, obwohl der Wert scheinbar innerhalb einer Methode geändert wurde.

Das Problem liegt darin, wie die Struktur an die Methode übergeben wird. Im angegebenen Code ändert die TVManager-Methode sendMessage() eine Kopie des Connector-Felds, und alle innerhalb der Methode vorgenommenen Änderungen werden nicht zurück an die ursprüngliche Struktur weitergegeben.

Um dies zu beheben, sollte die Methode verwenden ein Zeigerempfänger. Indem dem Empfänger ein Sternchen (*) vorangestellt wird, erhält die Methode einen Zeiger auf die tatsächliche Strukturinstanz und alle innerhalb der Methode vorgenommenen Änderungen werden auf die ursprüngliche Struktur angewendet.

func (this *TVManager) sendMessage(message string) {
    fmt.Println("5", this.connector)
    payload := map[string]string{
        "id":    "0",
        "type":  "request",
        "uri":   "ssap://system.notifications/createToast",
        "payload": "{'message': 'This is a message'}",
    }
    this.connector.sendCommand(payload)
    fmt.Println("4", this.connector)
}
Nach dem Login kopieren

Ähnlich gilt in der Wenn Sie ein Scheinobjekt verwenden, sollte die sendCommand()-Methode auch einen Zeigerempfänger verwenden.

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

Eine weitere Go-Konvention besteht darin, die Verwendung von „this“ oder „self“ als Empfänger zu vermeiden Namen. Stattdessen wird empfohlen, einen prägnanten und beschreibenden Namen zu verwenden, der der Funktionalität der Methode entspricht.

Durch die Implementierung dieser Änderungen wird das Strukturfeld erfolgreich aktualisiert, ohne dass es auf seinen ursprünglichen Wert zurückgesetzt wird.

Das obige ist der detaillierte Inhalt vonWarum wird mein Strukturfeld in Go unerwartet 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