Heim > Backend-Entwicklung > Golang > Warum erfordert das Anhängen an einen in einer Go-Map gefundenen Slice eine Neuzuweisung?

Warum erfordert das Anhängen an einen in einer Go-Map gefundenen Slice eine Neuzuweisung?

Barbara Streisand
Freigeben: 2024-11-05 06:41:02
Original
372 Leute haben es durchsucht

Why Does Appending to a Slice Found in a Go Map Require Reassignment?

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

Das direkte Anhängen an ein von einer Karte abgerufenes Segment kann eine schwierig zu verstehende Aufgabe sein. Schauen wir uns das Problem und seine Lösung genauer an.

Im bereitgestellten Code wurde versucht, an einen in einer Karte gespeicherten Slice anzuhängen:

<code class="go">mappedAminoAcid, ok := aminoAcidsToCodons[aminoAcid]
if ok {
    // NOT WORKING: mappedAminoAcid = append(mappedAminoAcid, codon)
    aminoAcidsToCodons[aminoAcid] = append(mappedAminoAcid, codon)
}</code>
Nach dem Login kopieren

Dies schlug jedoch fehl, da „append“ zurückgegeben wurde ein neues Slice, wenn das zugrunde liegende Array wachsen muss. Daher ist es notwendig, das neue Slice wieder dem Map-Eintrag zuzuweisen.

Aus diesem Grund funktioniert die direkte Zuweisung nicht:

Wenn ein Slice von einer Funktion zurückgegeben oder über eine Map aufgerufen wird, Es ist eine Kopie des ursprünglichen Slice, kein Zeiger. An der Kopie vorgenommene Änderungen werden nicht im Original widergespiegelt.

Betrachten Sie beispielsweise eine Zeichenfolge:

<code class="go">x := "foo"
y := x
y = "bar"
fmt.Println(x) // "foo" (unchanged)</code>
Nach dem Login kopieren

Da ein Null-Slice als anfängliches Argument zum Anhängen akzeptabel ist, kann der Code dies tun vereinfacht werden:

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

Zusammenfassend lässt sich sagen, dass es beim Anhängen an einen aus einer Karte abgerufenen Slice wichtig ist, sich daran zu erinnern, dass der zurückgegebene Slice eine Kopie ist, und den neuen Slice wieder dem Karteneintrag zuzuweisen.

Das obige ist der detaillierte Inhalt vonWarum erfordert das Anhängen an einen in einer Go-Map gefundenen Slice eine Neuzuweisung?. 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