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