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

golang : partage de tableau entre tranches

WBOY
WBOYavant
2024-02-09 22:42:09848parcourir

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")

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]

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]
}

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer