Maison > développement back-end > Golang > Comment le découpage d'une tranche Go avec `s = s[2:]` a-t-il un impact sur sa capacité différemment de `s = s[:0]` ou `s = s[:4]` ?

Comment le découpage d'une tranche Go avec `s = s[2:]` a-t-il un impact sur sa capacité différemment de `s = s[:0]` ou `s = s[:4]` ?

DDD
Libérer: 2024-12-01 17:35:11
original
869 Les gens l'ont consulté

How Does Slicing a Go Slice with `s = s[2:]` Impact Its Capacity Differently Than `s = s[:0]` or `s = s[:4]`?

Découpage et réduction de capacité dans les tranches Go

Lorsque vous travaillez avec des tranches dans Go, il est essentiel de comprendre l'impact des opérations de découpage sur leur capacité. Cet article répond à une question spécifique concernant les effets variables des différentes opérations de découpage sur la capacité des tranches.

Considérons l'extrait de code suivant :

package main

import "fmt"

func main() {
    s := []int{2, 3, 5, 7, 11, 13}
    printSlice(s)

    // Slice the slice to give it zero length.
    s = s[:0]
    printSlice(s)

    // Extend its length.
    s = s[:4]
    printSlice(s)

    // Drop its first two values.
    s = s[2:]
    printSlice(s)
}

func printSlice(s []int) {
    fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}
Copier après la connexion

Dans ce code, nous avons une tranche d'entiers s. Après l'avoir initialement imprimé, nous effectuons diverses opérations de découpage et observons leurs effets sur la longueur et la capacité de la tranche.

Capacité réduite après 's = s[2:]'

La question clé est de savoir pourquoi la ligne s = s[2:] réduit la capacité, contrairement à s = ​​s[:4] et s = s[:0]. La différence réside dans la syntaxe utilisée : [2:] représente le découpage à partir de l'index 2 jusqu'à la fin de la tranche, supprimant ainsi les deux premiers éléments.

Mémoire et découpage

Les tranches font référence à un partie d'un tableau sous-jacent en mémoire. Lorsque vous modifiez une tranche, vous modifiez son pointeur vers le tableau.

Dans le cas de s = s[2:], le pointeur de la tranche avance en sautant les deux premiers éléments. Cela réduit efficacement la capacité de la tranche puisqu'elle pointe désormais vers une plus petite partie du tableau sous-jacent.

Pouvons-nous récupérer les éléments coupés ?

Malheureusement, vous ne pouvez pas récupérer les deux premiers éléments qui ont été coupés en utilisant s = s[2:]. En effet, le pointeur de la tranche a avancé et les données d'origine ne sont plus référencées.

Conclusion

Comprendre le comportement des opérations de découpage est crucial lorsque l'on travaille avec des tranches Go. Différentes syntaxes de découpage peuvent avoir des effets variables sur la capacité, et il est essentiel d'être conscient de ces implications pour éviter des résultats inattendus.

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