Go: Warum kann ich nicht direkt an ein in einer Karte gefundenes Segment anhängen?
In Go können Sie beim Arbeiten mit Karten Es kann vorkommen, dass Sie Werte an einen vorhandenen Ausschnitt innerhalb der Karte anhängen müssen. Der Versuch, direkt an das durch den Zugriff zurückgegebene Slice anzuhängen, kann jedoch dazu führen, dass die Änderungen nicht gespeichert werden.
Um dieses Problem zu veranschaulichen, betrachten Sie das folgende Codefragment:
<code class="go">aminoAcidsToCodons := map[rune][]string{} for codon, aminoAcid := range utils.CodonsToAminoAcid { mappedAminoAcid := aminoAcidsToCodons[aminoAcid] // Returning a copy of the slice // instead of a reference // Not working: mappedAminoAcid = append(mappedAminoAcid, codon) aminoAcidsToCodons[aminoAcid] = append(mappedAminoAcid, codon) // Using long-form access }</code>
Im In der kommentierten Zeile wird versucht, direkt an das von „aminoAcidsToCodons[aminoAcid]“ zurückgegebene Slice anzuhängen. Dieser Vorgang schlägt jedoch fehl, da eine Kopie des Slice zurückgegeben wird und kein Verweis auf das Slice in der Karte.
Der Grund für dieses Verhalten liegt in der Art und Weise, wie das Anhängen in Go funktioniert. Wenn die Kapazität des zugrunde liegenden Arrays eines Slice überschritten wird, erstellt „append“ ein neues Slice und kopiert die vorhandenen Elemente hinein. Dieses neue Slice wird dann zurückgegeben, während das ursprüngliche Slice unverändert bleibt.
Um erfolgreich an ein Slice in einer Karte anzuhängen, müssen Sie daher das Ergebnis des Anhängevorgangs wieder dem entsprechenden Schlüssel in der Karte zuweisen. Dies kann weiter vereinfacht werden, indem ein Null-Slice als erstes Argument zum Anhängen verwendet wird, wie im folgenden geänderten Code zu sehen ist:
<code class="go">aminoAcidsToCodons := map[rune][]string{} for codon, aminoAcid := range utils.CodonsToAminoAcid { aminoAcidsToCodons[aminoAcid] = append(aminoAcidsToCodons[aminoAcid], codon) }</code>
Das obige ist der detaillierte Inhalt vonWarum kann ich nicht direkt an ein Slice in einer Go-Map anhängen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!