Maison >développement back-end >Golang >Comment éviter les erreurs « Limites de coupe hors de portée » lors du découpage en Go ?

Comment éviter les erreurs « Limites de coupe hors de portée » lors du découpage en Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-04 00:21:09380parcourir

How to Avoid

Découpage en Go : Comprendre les erreurs hors limites

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

  • low est la limite inférieure
  • high est la limite supérieure
  • cap(a) est le capacité de l'opérande découpé

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!

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