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) }
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.
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.
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.
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.
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!