Maison > développement back-end > Golang > Pourquoi `a[len(slice)]` ne panique-t-il pas dans Go Slices ?

Pourquoi `a[len(slice)]` ne panique-t-il pas dans Go Slices ?

Susan Sarandon
Libérer: 2024-12-12 16:40:10
original
474 Les gens l'ont consulté

Why Doesn't `a[len(slice)]` Panic in Go Slices?

Le découpage perplexe de Go : pourquoi un[len(slice)] ne panique pas

Introduction

Dans Go, lors du découpage d'un tableau ou d'une tranche, on pourrait s'attendre à ce que le dépassement de la longueur du tableau ou de la tranche sous-jacente entraîne une panique. Cependant, pour les tranches, ce comportement diverge étrangement.

Le problème

Considérez le code Go suivant :

a := []int{1, 2, 3}
fmt.Println(a[0:])
fmt.Println(a[1:])
fmt.Println(a[2:])
fmt.Println(a[3:]) // Surprisingly, doesn't panic
fmt.Println(a[4:]) // Panics as expected
Copier après la connexion

déroutant que la tranche a [3:] ne produit pas de panique, même s'il semble dépasser la durée du array.

La réponse

Ce comportement est dicté par la spécification du langage Go :

  • Pour les tableaux et les chaînes, les indices hors plage sont définis comme faibles > len(a) ou élevé > len(a), où a est le tableau sous-jacent.
  • Pour les tranches, les indices hors plage sont définis comme élevés > cap(a), où cap(a) représente la capacité de la tranche.

Dans notre exemple, a est un tableau et sa longueur est 3. Cependant, en épissant jusqu'à la longueur du tableau, c'est-à-dire a[3:], est considéré dans la plage valide car le tableau sous-jacent a une longueur de 3.

Comme l'explique la spécification, "La limite supérieure de l'index est la capacité de la tranche cap(a) plutôt que la longueur." Donc, dans ce cas, a[3:] crée une tranche vide car haut - bas = 3 - 3 = 0.

Une distinction clé

Il est important de notez que l'utilisation d'un index au-delà de la capacité de la tranche (c'est-à-dire a[4:] dans notre exemple) reste hors de portée et entraînera une panique à l'exécution. La spécification indique explicitement ceci : "Si les indices sont hors de portée au moment de l'exécution, une panique à l'exécution se produit."

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