Maison > développement back-end > Golang > Comment append() affecte-t-il les tranches dans Go ?

Comment append() affecte-t-il les tranches dans Go ?

Mary-Kate Olsen
Libérer: 2024-11-15 13:54:02
original
706 Les gens l'ont consulté

How Does append() Affect Slices in Go?

Comprendre le comportement de append() sur les tranches

Malgré les hypothèses initiales de slice en tant que pointeur, le code fourni démontre que l'ajout () l’opération n’affecte pas directement la tranche d’origine. En effet, dans Go, tout est transmis par valeur, y compris les tranches. Ainsi, lorsque vous transmettez une tranche à une fonction ou l'attribuez à une nouvelle variable, vous ne transmettez qu'une copie de l'en-tête de la tranche.

L'en-tête de la tranche contient des informations telles que la longueur de la tranche, sa capacité, et un pointeur vers le tableau sous-jacent. Lorsque l'opération append() est effectuée sur une tranche, un nouveau tableau est alloué si nécessaire pour accueillir les nouveaux éléments. L'en-tête de tranche est ensuite mis à jour pour pointer vers le nouveau tableau et les nouveaux éléments sont copiés. Ce nouvel en-tête de tranche est renvoyé à la suite de l'appel append().

Dans l'exemple de code, vous attribuez la valeur de retour de l'opération append() à la variable slice1. Cela signifie que slice1 pointe désormais vers un tableau différent de slice. Toute modification apportée aux éléments de slice1 ne sera pas reflétée dans slice, et vice versa.

Pour obtenir le comportement où slice et slice1 font référence au même tableau, vous devrez utiliser un pointeur vers une tranche au lieu d'une tranche elle-même. Par exemple :

func main() {
    slice := make([]int, 10, 10)
    slice[0] = 0
    slice[1] = 1

    slicePtr := &slice
    slice1 := *slicePtr
    slice1[0] = 10000
    fmt.Println(slice)

    *slicePtr = append(*slicePtr, 100)
    (*slicePtr)[0] = 20000

    fmt.Println(slice)
}
Copier après la connexion

Dans cet exemple, slice et slice1 pointent vers le même tableau sous-jacent, donc toutes les modifications apportées à l'un seront visibles dans l'autre.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal