首页  >  文章  >  后端开发  >  在 Go 中创建地图切片时,为什么会收到“运行时错误:分配给 Nil Map 中的条目”?

在 Go 中创建地图切片时,为什么会收到“运行时错误:分配给 Nil Map 中的条目”?

Patricia Arquette
Patricia Arquette原创
2024-11-04 12:40:29799浏览

Why am I getting a

运行时错误:在创建地图片段期间“分配给 Nil 地图中的条目”

在尝试生成地图片段时,出现“分配给 nil 映射中的条目”运行时错误。尽管代码编译成功,但此错误阻碍了程序的执行。

目标是创建一个映射数组,每个映射包含两个索引:“Id”和“Investor”。代码尝试执行以下操作:

<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>

最初,尝试使用以下代码解决问题:

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

但是,它没有解决问题。

全面的解决方案

要有效地创建地图切片,必须采用不同的方法。考虑以下示例:

<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>

可以使用复合文字,而不是使用循环为每个映射分配值:

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

使用结构的替代解决方案

对于更惯用的方法,建议使用结构体来表示投资者:

<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>

通过采用这些技术,可以消除运行时错误,并获得所需的切片可以获取映射或结构体数组,具体取决于程序的具体要求。

以上是在 Go 中创建地图切片时,为什么会收到“运行时错误:分配给 Nil Map 中的条目”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn