首頁  >  文章  >  後端開發  >  在 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