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

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