Rumah > pembangunan bahagian belakang > Golang > Mengapa Menetapkan Peta dalam Go Menghasilkan 'ralat masa jalan: penetapan kepada entri dalam peta kosong' dan Bagaimana Ia Boleh Dibetulkan?

Mengapa Menetapkan Peta dalam Go Menghasilkan 'ralat masa jalan: penetapan kepada entri dalam peta kosong' dan Bagaimana Ia Boleh Dibetulkan?

Susan Sarandon
Lepaskan: 2024-12-03 22:27:12
asal
199 orang telah melayarinya

Why Does Assigning to a Map in Go Result in a

Ralat Masa Jalan dalam Tugasan Peta

Soalan:

Semasa cuba menukar peta kepada fail YAML, ralat ditemui menyatakan "ralat masa jalan: tugasan kepada kemasukan dalam peta kosong." Semak coretan kod berikut:

package main

import (
    "fmt"
    "gopkg.in/yaml.v2"
)

type T struct {
    cn     string
    street string
}

func main() {
    names := []string{"kasi", "remya", "nandan"}

    m := make(map[string]map[string]T, len(names))
    for _, name := range names {

        //t := T{cn: "Chaithra", street: "fkmp"}

        m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}

    }
    fmt.Println(m)

    y, _ := yaml.Marshal(&m)

    fmt.Println(string(y))
    //fmt.Println(m, names)
}
Salin selepas log masuk

Apakah yang menyebabkan ralat ini dan bagaimanakah ia boleh diselesaikan?

Jawapan:

Isunya terletak dalam permulaan peta dalam dalam peta luar. Dalam contoh yang diberikan, peta m["uid"] tidak dimulakan, mengakibatkan peta sifar apabila cuba memberikan nama kepadanya.

Untuk memulakan peta dalam, tambahkan baris berikut sebelum bagi gelung:

m["uid"] = make(map[string]T)
Salin selepas log masuk

Ini mencipta peta dalaman dan membenarkan nama diberikan kepadanya tanpa menemui peta kosong ralat.

Kod yang diperbetulkan menjadi:

func main() {
    names := []string{"kasi", "remya", "nandan"}

    m := make(map[string]map[string]T, len(names))
    m["uid"] = make(map[string]T) // Initialize the inner map

    for _, name := range names {
        m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}
    }
    fmt.Println(m)

    y, _ := yaml.Marshal(&m)

    fmt.Println(string(y))
    //fmt.Println(m, names)
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Menetapkan Peta dalam Go Menghasilkan 'ralat masa jalan: penetapan kepada entri dalam peta kosong' dan Bagaimana Ia Boleh Dibetulkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan