Maison > développement back-end > Golang > Pourquoi le slice `a[3:]` de Go ne panique-t-il pas, mais `a[4:]` le fait ?

Pourquoi le slice `a[3:]` de Go ne panique-t-il pas, mais `a[4:]` le fait ?

Linda Hamilton
Libérer: 2024-12-10 08:03:10
original
184 Les gens l'ont consulté

Why Doesn't Go's `a[3:]` Slice Panic, But `a[4:]` Does?

Comprendre le comportement de l'expression Slice de Go

Dans Go, le découpage est un mécanisme puissant permettant d'extraire des éléments spécifiques d'une tranche, d'un tableau ou d'une chaîne. Cependant, certains comportements peuvent paraître inattendus, comme les suivants :

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

Pourquoi un[3:] ne panique-t-il pas ?

Selon le langage Go spécification, pour les tranches de tableau ou de chaîne, les indices sont dans la plage s'ils satisfont à la condition suivante : 0 <= low <= high <= len(a). Cependant, pour les tranches, la limite supérieure de l'index est cap(a) plutôt que len(a). Dans ce cas, le tableau sous-jacent a une capacité de 3, qui est égale à sa longueur.

Par conséquent, a[3:] ne panique pas car la limite supérieure de l'index de 3 est dans la plage valide déterminée par cap(a). Il en résulte une tranche vide, car elle commence à l'index 3 et a une longueur de 0 (len(a) - 3 = 0).

Pourquoi a[4:] panique-t-il ?

D'un autre côté, a[4:] panique car la limite supérieure de l'index de 4 dépasse à la fois len(a) et cap(a). La spécification indique que les indices hors plage au moment de l'exécution entraîneront une panique à l'exécution.

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