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