Maison > développement back-end > Golang > Pourquoi ne panique-t-on pas lors du découpage d'une tranche à « len(slice) » ?

Pourquoi ne panique-t-on pas lors du découpage d'une tranche à « len(slice) » ?

Patricia Arquette
Libérer: 2024-12-23 04:26:16
original
570 Les gens l'ont consulté

Why Doesn't Go Panic When Slicing a Slice at `len(slice)`?

Opérations de tranche dans Go : comprendre les limites de len(slice)

Pourquoi Go autorise-t-il le découpage à partir de len(slice) ? Cette question découle du comportement observé dans l'extrait de code suivant :

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

Explication :

La spécification Go pour les expressions de tranche indique que les indices sont dans la plage si 0 <= faible <= élevé <= len(a). Il est important de noter que pour les tableaux et les chaînes, la limite supérieure de l'index est len(a), inclus. Pour les tranches, la limite supérieure de l'index est cap(a), qui dans ce cas est la même que len(a).

Cela signifie que l'expression a[3:] ne panique pas car la limite supérieure de l'index est autorisé à aller jusqu'à len(a) inclus. Cependant, puisque la limite inférieure de l'index est également 3, la tranche résultante sera vide.

Un index supérieur à len(a) sera hors de portée et provoquera une panique à l'exécution. Dans l'exemple, a[4:] panique car il essaie de créer une tranche avec une limite d'index supérieure supérieure à len(a).

Par conséquent, Go autorise le découpage à partir de len(slice) car la spécification autorise explicitement indices jusqu'à len(a) inclus pour les tableaux et les chaînes. Cela permet des opérations de découpage pratiques sans avoir besoin de vérifications explicites pour garantir que la limite supérieure de l'index se situe dans la plage spécifiée.

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