Maison > développement back-end > Golang > golang : partage de tableau entre tranches

golang : partage de tableau entre tranches

WBOY
Libérer: 2024-02-09 22:42:09
avant
898 Les gens l'ont consulté

golang : partage de tableau entre tranches

L'éditeur PHP Zimo vous présentera la connaissance du partage de tableaux entre tranches en golang dans cet article. En Golang, une tranche est un tableau dynamique qui peut être automatiquement étendu selon les besoins. Le partage de tableau entre les tranches est une fonctionnalité très importante dans Golang. Il permet à plusieurs tranches de partager le même tableau sous-jacent sans copier de données. Cela permet non seulement d'économiser de l'espace mémoire, mais améliore également les performances. Ensuite, nous expliquerons en détail le principe et l’utilisation du partage de tableaux entre tranches.

Contenu de la question

Cela explique la fonction d'ajout des tranches.

Comme mentionné ci-dessus, append renvoie la tranche mise à jour.

Cela signifie-t-il que la tranche nouvellement créée ne partage pas le tableau sous-jacent avec la tranche existante ?

Pour d'autres opérations de découpage, telles que mySlice[x:y], la nouvelle tranche partagera le tableau sous-jacent avec mySlice comme indiqué ci-dessous.

PS : Code de test :

var names = make([]string, 4, 10)
names1 := append(names, "Tom")
Copier après la connexion

Donc, dans ce cas, il y a suffisamment de capacité disponible dans le nom. Par conséquent, append ne peut pas créer un nouveau tableau sous-jacent.

Sortie :

[   ]
[    Tom]
Copier après la connexion

La sortie ne devrait-elle pas être la même que celle du tableau sous-jacent partagé ?

Il me manque définitivement quelque chose de très basique ici.

Solution

Vous avez raison, names1 使用与 names même tableau sous-jacent.

Non, le résultat ne devrait pas être le même car names 的长度为 4,而 names1 a une longueur de 5. Notez que les deux ont une capacité (10).

Voici un exemple qui pourrait clarifier un peu cela :

func main() {
    emptyNames := make([]string, 0, 10)
    notEmptyNames := append(emptyNames, "Jerry")
    extendedNames := emptyNames[:1] // OK, because 1 < cap(emptyNames)
    fmt.Println("emptyNames:", emptyNames)
    //emptyNames: []
    fmt.Println("notEmptyNames:", notEmptyNames)
    //notEmptyNames: [Jerry]
    fmt.Println("extendedNames:", extendedNames)
    //extendedNames: [Jerry]
}
Copier après la connexion

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:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal