Maison > développement back-end > Golang > le corps du texte

Pourquoi \'panique : erreur d'exécution : index hors plage\' se produit-il lorsqu'une tranche Go a une longueur non nulle ?

Linda Hamilton
Libérer: 2024-10-31 15:24:52
original
511 Les gens l'ont consulté

Why Does

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 :

  • make([]string, 0, 4) : initialise un tableau vide, ce qui signifie que l'accès à result[0] provoquera un panique.
  • make([]string, 4) : initialise un tableau avec 4 éléments, permettant l'accès au résultat[0] via le résultat[3].

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>
Copier après la connexion

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>
Copier après la connexion

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!