Maison > Article > développement back-end > Pourquoi l’ajout à une tranche trouvée dans une carte Go nécessite-t-il une réaffectation ?
Ajouter directement à une tranche récupérée à partir d'une carte peut être une tâche délicate à comprendre. Examinons le problème et sa solution.
Dans le code fourni, une tentative d'ajout à une tranche stockée dans une carte a été effectuée :
<code class="go">mappedAminoAcid, ok := aminoAcidsToCodons[aminoAcid] if ok { // NOT WORKING: mappedAminoAcid = append(mappedAminoAcid, codon) aminoAcidsToCodons[aminoAcid] = append(mappedAminoAcid, codon) }</code>
Cependant, cela a échoué car l'ajout renvoie une nouvelle tranche si le tableau sous-jacent doit croître. Par conséquent, il est nécessaire de réattribuer la nouvelle tranche à l'entrée de la carte.
Voici pourquoi l'affectation directe ne fonctionne pas :
Lorsqu'une tranche est renvoyée par une fonction ou accessible à partir d'une carte, c'est une copie de la tranche originale, pas un pointeur. Les modifications apportées à la copie ne sont pas reflétées dans l'original.
Par exemple, considérons une chaîne :
<code class="go">x := "foo" y := x y = "bar" fmt.Println(x) // "foo" (unchanged)</code>
Puisqu'une tranche nulle est acceptable comme argument initial à ajouter, le code peut être simplifié :
<code class="go">aminoAcidsToCodons := map[rune][]string{} for codon, aminoAcid := range utils.CodonsToAminoAcid { aminoAcidsToCodons[aminoAcid] = append(aminoAcidsToCodons[aminoAcid], codon) }</code>
En résumé, lors d'un ajout à une tranche récupérée à partir d'une carte, il est crucial de se rappeler que la tranche renvoyée est une copie, et d'attribuer la nouvelle tranche revient à l'entrée de la carte.
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!