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
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!