Maison >développement back-end >Golang >Comment copier une tranche de Golang

Comment copier une tranche de Golang

(*-*)浩
(*-*)浩original
2019-12-17 11:24:173523parcourir

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 0
Oui, 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn