Maison > développement back-end > Golang > 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
Libérer: 2024-11-04 12:40:29
original
883 Les gens l'ont consulté

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

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

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

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

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

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!

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