Heim >Backend-Entwicklung >Golang >Warum funktioniert das direkte Anhängen an ein Slice in einer Go-Map nicht wie erwartet?

Warum funktioniert das direkte Anhängen an ein Slice in einer Go-Map nicht wie erwartet?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-05 22:42:02249Durchsuche

Why Doesn't Directly Appending to a Slice in a Go Map Work as Expected?

Direktes Anhängen an ein Segment in einer Go-Karte

In Go kann es zu einem Szenario kommen, in dem Sie eine verknüpfte Karte verwalten möchten Runen mit Slices und hänge Elemente an die entsprechenden Slices an. Das direkte Anhängen an den Slice, der durch den Zugriff auf die Karte zurückgegeben wird (z. B. „mappedAminoAcid = append(mappedAminoAcid, codon)“), funktioniert jedoch nicht wie erwartet. Stattdessen müssen Sie die ausführliche Form des Zugriffs verwenden (aminoAcidsToCodons[aminoAcid] = append(mappedAminoAcid, codon)).

Dieses Verhalten ergibt sich aus der Art und Weise, wie Go mit Slices umgeht. Wenn Sie mit der Append-Funktion an ein Slice anhängen, wird ein neues Slice zurückgegeben, wenn das zugrunde liegende Array größer werden muss, um das neue Element aufzunehmen. Um das in der Karte gespeicherte Slice zu aktualisieren, müssen Sie daher das neue Slice wieder der Karte zuweisen, genau wie Sie es mit Zeichenfolgen tun würden.

Zum Beispiel:

<code class="go">var x map[string]string
x["a"] = "foo"

y := x["a"]
y = "bar"

// x["a"] is still "foo"</code>

Zur Vereinfachung In Ihrem Code können Sie die Tatsache nutzen, dass ein Null-Slice ein gültiges erstes Argument für das Anhängen ist:

<code class="go">aminoAcidsToCodons := map[rune][]string{}
for codon, aminoAcid := range utils.CodonsToAminoAcid {
    aminoAcidsToCodons[aminoAcid] = append(aminoAcidsToCodons[aminoAcid], codon)
}</code>

Wenn Sie verstehen, wie Slices in Go funktionieren, können Sie Szenarien mit dem Anhängen von Slices in Karten effektiv bewältigen.

Das obige ist der detaillierte Inhalt vonWarum funktioniert das direkte Anhängen an ein Slice in einer Go-Map nicht wie erwartet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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