Maison > Article > développement back-end > Comment copier une tranche de Golang
La tranche de Golang est une structure de pointeur pointant vers le tableau sous-jacent.
Cette structure possède trois attributs, 1. Pointeur vers le tableau, 2.len : le nombre d'éléments dans la tranche 3.cap : la quantité de mémoire occupée par la tranche.
Ce n'est qu'en comprenant profondément ces trois attributs que vous pourrez éviter de commettre des erreurs lors de l'utilisation de slice. (Apprentissage recommandé : go)
Comprendre correctement les variables et le partage
Plusieurs tranches peuvent partager des données sous-jacentes et des tableaux de référence. Certains intervalles peuvent se chevaucher
Ce qui précède est une phrase de la Bible Golang. Une compréhension approfondie de cette phrase est très significative pour la programmation horaire.
Quand les données partagées seront-elles modifiées par d'autres variables ?
func f1() { a1 := []int{1,2,3,4,5,6} a2 := a1 a3 := a1[1:3] a1[1] = 999 fmt.Println("a1=",a1,"a2=",a2,"a3=",a3) }
Résultats en cours
a1= [1 999 3 4 5 6] a2= [1 999 3 4 5 6] a3= [999 3] Process finished with exit code 0
Nous voyons clairement le partage de données, a1 est modifié à ce moment, les deux variables sont modifiées
Quand ne sera-t-elle pas modifiée
func f2() { a1 := []int{1,2,3,4,5,6} a2 := a1 a3 := a1[1:3] a2 = append(a2,888) a1[1] = 999 fmt.Println("a1=",a1,"a2=",a2,"a3=",a3) }
Exécuter le résultat
a1= [1 999 3 4 5 6] a2= [1 2 3 4 5 6 888] a3= [999 3] Process finished with exit code 0Oui, bien que a1 soit modifié, a2 n'est pas modifié. Nous savons que la fonction append sera confrontée à une réallocation de mémoire. Ainsi, lorsque a2 sera ajouté, il réappliquera de l'espace mémoire, copiera le tableau d'origine et ajoutera la nouvelle valeur. Autrement dit, lorsque l'opération d'ajout se produit, a2 ne partage plus la mémoire avec a1.
Lors de la copie d'une tranche, si vous faites face à plusieurs variables pointant vers un tableau en même temps, vous devez envisager le partage de données et la réallocation de mémoire.
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!