Maison > Article > développement back-end > Pourquoi \"panique : erreur d'exécution : index hors plage\" se produit-il lorsqu'une tranche Go a une longueur non nulle ?
Panique : erreur d'exécution : index hors plage lorsque la longueur du tableau n'est pas nulle
L'extrait de code fourni tente de parcourir une chaîne pour mots séparés contenant des voyelles. Cependant, il rencontre une erreur « panique : erreur d'exécution : index hors de portée », bien que la longueur du tableau ne soit pas nulle.
Pour comprendre cette erreur, il est essentiel de se plonger dans la structure de données de tranche sous-jacente.
Comprendre les tranches
Une tranche dans Go est un descripteur d'un segment de tableau. Il comprend trois composants : un pointeur vers le tableau réel, la longueur du segment et sa capacité (la longueur maximale que le segment peut accueillir).
Lors de la création d'une tranche à l'aide de make([]string, 0, 4) , un tableau sous-jacent vide est alloué, avec une longueur initiale de 0 et une capacité de 4.
Faire un Distinction
result := make([]string, 0, 4) diffère de result := make([]string, 4) de la manière suivante :
Compréhension append
La fonction append ajoute des éléments à la fin d'une tranche. Si la tranche a suffisamment de capacité, elle retranche la destination pour accueillir les nouveaux éléments. Sinon, un nouveau tableau sous-jacent est alloué.
Application au code
Dans le code fourni, la ligne result := make([]string, 0, 4 ) crée une tranche vide. Tenter d'accéder au résultat[0] dans la boucle entraînera une panique.
Pour corriger ce problème, utilisez append pour remplir la tranche, comme dans l'extrait de code suivant :
<code class="go">for i := 0; i < len(strs); i++ { if strings.ContainsAny(strs[i], "eaiu") { result = append(result, strs[i]) } }</code>
Alternativement, vous pouvez simplifier le code à l'aide d'une boucle basée sur une plage :
<code class="go">for _, s := range strs { if strings.ContainsAny(s, "eaiu") { result = append(result, s) } }</code>
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!