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
Libérer: 2024-12-05 03:43:14
original
763 Les gens l'ont consulté

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)
}
Copier après la connexion

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]
Copier après la connexion

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!

source:php.cn
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