Heim > Backend-Entwicklung > Golang > Wie kann ich Strukturfelder innerhalb einer Go-Map korrekt ändern?

Wie kann ich Strukturfelder innerhalb einer Go-Map korrekt ändern?

Barbara Streisand
Freigeben: 2024-12-25 01:07:14
Original
1007 Leute haben es durchsucht

How Can I Correctly Modify Struct Fields Within a Go Map?

Direktes Ändern von Feldern in einer Strukturkarte in Go

In Go ermöglicht Ihnen eine Karte von int zu struct den Zugriff auf die Strukturwerte mit dem Schlüssel. Das direkte Ändern eines Felds im Strukturwert kann jedoch zu unerwartetem Verhalten führen.

Grund für die Indirektion

Wenn Sie über die Karte auf den Strukturwert zugreifen, ist dies tatsächlich der Fall Zugriff auf eine Kopie der Struktur. Durch das Ändern dieser Kopie wird die ursprüngliche Struktur in der Karte nicht geändert. Um die ursprüngliche Struktur zu ändern, müssen Sie sie lesen, ändern und dann zurück in die Karte schreiben.

Das liegt daran, dass Go den Strukturwert an einem separaten Speicherort speichert, wenn er der Karte zugewiesen wird . Das Ändern der Kopie hat keinen Einfluss auf den ursprünglichen Wert.

Implizite versteckte Kosten

Es gibt keine impliziten versteckten Kosten beim Ändern von Feldern von Strukturen in anderen Datenstrukturen wie Slices oder Karten . Das Verhalten ist das gleiche wie im Fall einer Zuordnung von Ints zu Strukturen, bei der Änderungen an einer Kopie der Struktur keine Auswirkungen auf das Original haben.

Verwendung von Zeigern

Sie können Zeiger verwenden, um den ursprünglichen Strukturwert an Ort und Stelle zu ändern. Indem Sie den Zeiger auf die Struktur anstelle der Struktur selbst in der Karte speichern, können Sie direkt auf die Felder der ursprünglichen Struktur zugreifen und diese ändern.

Beispiel:

import "fmt"

type dummy struct {
    a int
}

func main() {
    x := make(map[int]*dummy)
    x[1] = &dummy{a: 1}
    x[1].a = 2
    fmt.Println(x[1].a) // Output: 2
}
Nach dem Login kopieren

In diesem Beispiel greifen wir über einen Zeiger auf den Strukturwert zu, sodass wir seine Felder direkt ändern können.

Das obige ist der detaillierte Inhalt vonWie kann ich Strukturfelder innerhalb einer Go-Map korrekt ändern?. 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