Comprendre la modification de tranche dans Go
Dans Go, les variables de tranche se comportent différemment des tableaux typiques. Cela peut entraîner un comportement inattendu, en particulier lors de la modification de tranches.
Le mystère de la tranche originale changeante
Considérez le code suivant :
import "fmt" func main() { A := []int{3, 4, 5, 3, 7} fmt.Println("Initial slice: ", A) funcSome(A) fmt.Println("Modified slice: ", A) } func funcSome(slice []int) { fmt.Println("Inside function, original slice: ", slice) temp := slice // copy by value temp[0] = 10 fmt.Println("Inside function, modified temp: ", temp) fmt.Println("Inside function, original slice: ", slice) }
Lorsque vous exécutez ce code, vous pourriez être surpris de constater que la modification de la tranche temporaire, temp, modifie également la tranche d'origine, A.
Plongez dans les éléments internes de la tranche
Pour comprendre ce comportement, nous devons nous plonger dans la structure interne des tranches. Une variable de tranche se compose de trois composants :
Lorsque vous attribuez une tranche à une nouvelle variable par valeur, comme nous le faisons avec temp := slice, vous créez une copie superficielle. Cela signifie que la nouvelle tranche (temp) partage le même tableau de support et le même pointeur que la tranche d'origine (slice).
Le dilemme append()
L'append( ) dans Go ajoute des éléments à une tranche en créant un nouveau tableau de sauvegarde et en y copiant les données existantes. Cependant, si la nouvelle tranche a une capacité insuffisante, la fonction append() augmentera automatiquement la capacité en réattribuant un tableau de sauvegarde plus grand.
Dans votre exemple, la fonction remove() utilise append() pour créer une nouvelle tranche. tranche. Étant donné que temp et A partagent le même tableau de support, toute modification apportée à la nouvelle tranche affectera également la tranche d'origine.
Conclusion
Comprendre la modification de tranche dans Go nécessite une familiarité avec sa structure interne unique. N'oubliez pas que lorsque vous copiez des tranches par valeur, vous créez une copie superficielle, qui partage le même tableau de sauvegarde. Ce comportement peut entraîner des conséquences inattendues lors de la modification des tranches.
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!