Maison > Article > développement back-end > Pourquoi ne puis-je pas ajouter directement une tranche dans une carte Go ?
Go : Pourquoi ne puis-je pas ajouter directement une tranche trouvée dans une carte ?
Dans Go, lorsque vous travaillez avec des cartes, vous peut rencontrer une situation dans laquelle vous devez ajouter des valeurs à une tranche existante dans la carte. Cependant, tenter d'ajouter directement à la tranche renvoyée en y accédant peut entraîner le non-stockage des modifications.
Pour illustrer ce problème, considérons le fragment de code suivant :
<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>
Dans le ligne commentée, une tentative est faite pour l'ajouter directement à la tranche renvoyée par aminoAcidsToCodons[aminoAcid]. Cependant, cette opération échoue puisque ce qui est renvoyé est une copie de la tranche, et non une référence à la tranche dans la carte.
La raison de ce comportement réside dans la façon dont l'append fonctionne dans Go. Lorsque la capacité du tableau sous-jacent d'une tranche est dépassée, append crée une nouvelle tranche et y copie les éléments existants. Cette nouvelle tranche est ensuite renvoyée, tandis que la tranche d'origine reste inchangée.
Par conséquent, pour réussir l'ajout à une tranche dans une carte, vous devez attribuer le résultat de l'opération d'ajout à la clé correspondante dans la carte. Cela peut être encore simplifié en utilisant une tranche nulle comme premier argument à ajouter, comme le montre le code modifié suivant :
<code class="go">aminoAcidsToCodons := map[rune][]string{} for codon, aminoAcid := range utils.CodonsToAminoAcid { aminoAcidsToCodons[aminoAcid] = append(aminoAcidsToCodons[aminoAcid], codon) }</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!