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
Linda Hamiltonoriginal
2024-12-10 08:03:10193parcourir

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

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!

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