Maison >développement back-end >Golang >Pourquoi le découpage de « b[1 :] » provoque-t-il une erreur hors limites dans Go ?

Pourquoi le découpage de « b[1 :] » provoque-t-il une erreur hors limites dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-05 03:43:14761parcourir

Why Does Slicing `b[1:]` Cause an Out-of-Bounds Error in Go?

Slicing : Erreur hors limites dans Go

Lors de l'exécution du code suivant :

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

vous rencontrez un Erreur "hors limites". Cette erreur se produit en raison d'une expression de découpage non valide lors de la création de la tranche c.

Dans Go, le découpage d'un tableau ou d'une tranche suit ces règles :

  • Les indices sont dans la plage si 0 < = low <= high <= len(a) pour les tableaux ou les chaînes.
  • Pour les tranches, la limite supérieure de l'index est par défaut la valeur capacité de tranche (cap(a)) au lieu de sa longueur.

L'expression de découpage b[1:] tente de créer une nouvelle tranche c avec une limite inférieure de 1. Cependant, la limite supérieure est manquant et la longueur par défaut de b, qui est 0. Cela se traduit par une tranche avec une limite inférieure supérieure à sa limite supérieure, conduisant à l'erreur "hors limites".

Pour corriger cette erreur, vous devez vous assurer que la limite supérieure de l'expression de découpage est supérieure ou égale à la limite inférieure. Par exemple, vous pouvez utiliser l'expression suivante pour créer une tranche c valide :

c := b[1:2]

Cela crée une tranche c avec une limite inférieure de 1 et une limite supérieure de 2, qui est valide puisque 1 < = 2 <= cap(b) (la capacité de b est de 5).

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