Heim >Backend-Entwicklung >Golang >Warum funktioniert das direkte Anhängen an ein Slice in einer Go-Map nicht wie erwartet?
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!