Maison  >  Article  >  développement back-end  >  Pourquoi est-ce que je reçois une « Erreur d'exécution : affectation à une entrée dans une carte Nil » lors de la création d'une tranche de cartes dans Go ?

Pourquoi est-ce que je reçois une « Erreur d'exécution : affectation à une entrée dans une carte Nil » lors de la création d'une tranche de cartes dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-04 12:40:29805parcourir

Why am I getting a

Erreur d'exécution : "Affectation à une entrée dans une carte nulle" lors de la création d'une tranche de cartes

Dans le but de générer une tranche de cartes, une erreur d'exécution "affectation à l'entrée dans une carte nulle" se produit. Malgré la compilation réussie du code, cette erreur gêne l'exécution du programme.

Le but est de créer un tableau de cartes, chaque carte contenant deux indices : "Id" et "Investor". Le code tente ceci :

<code class="go">for _, row := range rows {
    invs := make([]map[string]string, length)
    for i := 0; i < length; i++ {
        invs[i] = make(map[string]string)
        invs[i]["Id"] = inv_ids[i]
        invs[i]["Investor"] = inv_names[i]
    }
    return(msg)
}</code>

Initialement, une tentative a été faite pour résoudre le problème avec le code suivant :

<code class="go">invs := make([]make(map[string]string), length)</code>

Cependant, cela n'a pas résolu le problème.

Une solution complète

Pour créer efficacement une tranche de cartes, il faut utiliser une approche différente. Prenons l'exemple suivant :

<code class="go">package main

import "fmt"

func main() {
    a := make([]map[string]int, 100)
    for i := 0; i < 100; i++ {
        a[i] = map[string]int{"id": i, "investor": i}
    }
    fmt.Println(a)
}</code>

Au lieu d'utiliser une boucle pour attribuer des valeurs à chaque carte, on peut utiliser un littéral composite :

<code class="go">invs[i] = map[string]string{"Id": inv_ids[i], "Investor": inv_names[i]}</code>

Solution alternative utilisant des structures

Pour une approche plus idiomatique, il est conseillé d'utiliser une structure pour représenter un investisseur :

<code class="go">package main

import (
    "fmt"
    " strconv"
)

type Investor struct {
    Id   int
    Name string
}

func main() {
    a := make([]Investor, 100)
    for i := 0; i < 100; i++ {
        a[i] = Investor{Id: i, Name: "John" + strconv.Itoa(i)}
        fmt.Printf("%#v\n", a[i])
    }
}</code>

En employant ces techniques, l'erreur d'exécution peut être éliminée et la tranche souhaitée de des cartes ou un tableau de structures peuvent être obtenues, en fonction des exigences spécifiques du programme.

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