Lors du découpage d'une tranche en Go, il est essentiel de respecter des limites spécifiques pour éviter les erreurs. L'une de ces erreurs est l'erreur « limites de tranche hors plage ». Cette erreur se produit lorsque l'expression de tranche génère des indices qui se situent en dehors de la plage autorisée.
Dans l'extrait de code fourni :
package main import "fmt" func main() { a := make([]int, 5) printSlice("a", a) b := make([]int, 0, 5) printSlice("b", b) c := b[1:] printSlice("c", c) } func printSlice(s string, x []int) { fmt.Printf("%s len=%d cap=%d %v\n", s, len(x), cap(x), x) }
L'erreur se produit lors de la tentative de création de la tranche c avec le expression c := b[1:]. Cette erreur n'est pas due à la limite inférieure (qui peut être égale ou supérieure à la longueur), mais plutôt à la limite supérieure.
Dans Go, la limite supérieure par défaut pour le découpage est la longueur de l'opérande découpé. . Cependant, dans ce cas, l'opérande découpé b a une longueur de 0. Par conséquent, la limite supérieure par défaut devient 0. Par conséquent, l'expression c := b[1:] donne une limite inférieure de 1 et une limite supérieure de 0. .
Cela viole la règle de découpage qui stipule que pour les tranches, les indices doivent satisfaire aux conditions suivantes condition :
0 <= low <= high <= cap(a)
Où :
Dans ce cas, puisque 1 n'est pas inférieur ou égal à 0, le L'expression entraîne une erreur hors limites.
Pour résoudre ce problème, des limites explicites doivent être spécifiées lors du découpage. Par exemple :
c := b[1:1] // Slice from index 1 to 1 (empty slice) c := b[1:2] // Slice from index 1 to 2 (contains the element at index 1) c := b[1:cap(b)] // Slice from index 1 to the capacity of the operand (contains all elements)
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!