Maison  >  Article  >  développement back-end  >  Pourquoi mon code Go génère-t-il une erreur « panique : erreur d'exécution : index hors plage » lorsque la longueur du tableau n'est pas nulle ?

Pourquoi mon code Go génère-t-il une erreur « panique : erreur d'exécution : index hors plage » lorsque la longueur du tableau n'est pas nulle ?

DDD
DDDoriginal
2024-11-01 06:34:02197parcourir

Why Does My Go Code Throw a

"Allez « panique : erreur d'exécution : index hors plage » lorsque la longueur du tableau n'est pas nulle

Analyse

Le code Go fourni rencontre une erreur d'exécution en raison de l'accès à un index au-delà de la plage autorisée Lorsque vous travaillez avec des tranches dans Go, il est crucial de comprendre le concept de capacité et de longueur.

Comprendre les tranches

Une tranche Go est un descripteur d'un segment de tableau. Elle englobe un pointeur vers le tableau, la longueur du segment et sa capacité (longueur maximale du segment).

make([]string, 0, 4) vs. make([]string, 4)

La fonction make initialise et alloue les tranches result := make. ([]string, 0, 4) crée une tranche de longueur 0 et de capacité 4, tandis que result := make([]string, 4) (ou son résultat équivalent := []string{"", "", "" , ""}) initialise une tranche avec à la fois une longueur et une capacité de 4.

Accès au tableau

En résultat := make([]string, 0, 4), le tableau sous-jacent est vide, donc l'accès à result[0] provoquera une erreur d'exécution. En revanche, result := make([]string, 4) a quatre éléments de chaîne, permettant l'accès à result[0], result[1], result[2] et result[3].

Résolution de votre code

Dans votre fonction myFunc, vous utilisez le result problématique := make([]string , 0, 4) initialisation. Étant donné que votre code nécessite l'ajout d'éléments, vous devriez envisager d'utiliser result := make([]string, 0) et ajouter des éléments à l'aide de la fonction append. Alternativement, vous pouvez utiliser result := []string{} ou result := make([]string, 4), en fonction de vos besoins spécifiques.

Voici une version fonctionnelle de votre code utilisant make([] chaîne, 0) et ajouter (The Go Playground) :

<code class="go">package main

import "fmt"

func main() {
    fmt.Println(myFunc("Political srt"))
}

func myFunc(input string) []string {
    strs := strings.Fields(input)
    result := make([]string, 0) // Initialize with length 0 and append as needed
    for _, s := range strs {
        if strings.ContainsAny(s, "eaiu") {
            result = append(result, s) // Append to the result slice
        }
    }
    return result
}</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!

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