Maison > développement back-end > Golang > Pourquoi les Go Slices permettent-ils une indexation au-delà de leur longueur sans paniquer ?

Pourquoi les Go Slices permettent-ils une indexation au-delà de leur longueur sans paniquer ?

Patricia Arquette
Libérer: 2024-12-22 19:30:10
original
187 Les gens l'ont consulté

Why Do Go Slices Allow Indexing Beyond Their Length Without Panicking?

Découper au-delà de la longueur en Go

Lors du découpage d'une tranche en Go, il est possible de spécifier un index au-delà de sa longueur. Pourquoi ce comportement se produit-il et quelles sont ses implications ?

Conformément à la spécification Go, les indices de tableau et de tranche sont pris en compte dans la plage si 0 ≤ faible ≤ élevé ≤ len(a). Ainsi, pour les tableaux ou les chaînes, les indices sont valides jusqu'à len(a) inclus. Cependant, pour les tranches, la limite supérieure de l'index est déterminée par leur capacité cap(a) plutôt que par leur longueur.

Dans l'exemple donné,

a := []int{1, 2, 3}
fmt.Println(a[0:])
fmt.Println(a[1:])
fmt.Println(a[2:])
fmt.Println(a[3:]) // doesn't panic - why??
fmt.Println(a[4:]) // panics as expected
Copier après la connexion

a[3:] ne panique car il fait référence à une partie du tableau sous-jacent, qui s'étend au-delà de la longueur actuelle de la tranche mais reste dans sa capacité. Cela donne une tranche vide. Cependant, a[4:] déclenche une panique car il dépasse la longueur réelle du tableau.

Selon la spécification, l'accès aux index en dehors de la plage spécifiée entraîne une panique à l'exécution. Cependant, dans le cas de tranches, la capacité peut être considérée comme une plage étendue à des fins de découpage, permettant des indices allant jusqu'à len(a).

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