Comprendre les tranches : capacité par rapport à la longueur
Lorsque vous traitez des tranches dans Go, il est crucial de comprendre la relation entre la capacité et la longueur. La capacité fait référence à la taille du tableau sous-jacent sur lequel la tranche fonctionne, tandis que la longueur spécifie le nombre d'éléments actuellement inclus dans la tranche.
Erreur d'exécution : la longueur de la tranche dépasse la capacité
L'erreur « erreur d'exécution : makeslice : cap hors de portée » se produit lors de la tentative de création d'une tranche avec une capacité inférieure à sa longueur. Cette erreur se produit car les tranches, de par leur conception, maintiennent un invariant où la longueur ne peut jamais dépasser la capacité :
0 ≤ len(s) ≤ cap(s)
Dans votre exemple de code :
type b []int var k = make([]b, 10, 5) fmt.Println(k[8])
Vous avez défini une tranche k de type []b, où b est un autre type de tranche. Cependant, vous avez tenté de créer cette tranche avec une capacité de 5, ce qui est insuffisant pour s'adapter à sa longueur de 10. D'où l'erreur d'exécutionが発生します。
Pourquoi pas une compilation Erreur ?
Dans certains cas, comme le vôtre où les valeurs de capacité et de longueur sont statiques, un compilateur pourrait potentiellement détecter l'erreur au moment de la compilation. Cependant, cela n’est pas toujours réalisable. Considérez le code suivant :
package main import ( "fmt" "rand" ) func main() { k := make([]int, rand.Int(), rand.Int()) fmt.Println(k) }
Ici, les valeurs de capacité et de longueur sont déterminées dynamiquement au moment de l'exécution à l'aide du package rand. En tant que tels, les compilateurs ne sont pas en mesure de vérifier statiquement que la capacité dépassera toujours la longueur et doivent donc déléguer cette vérification au runtime.
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!