Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Mengelakkan Panik Masa Jalanan Apabila Menggunakan Peta Bersarang dalam Go?

Bagaimanakah Saya Mengelakkan Panik Masa Jalanan Apabila Menggunakan Peta Bersarang dalam Go?

DDD
DDDasal
2024-12-06 06:30:12198semak imbas

How Do I Avoid Runtime Panics When Using Nested Maps in Go?

Peta Bersarang dalam Go

Dalam Go, peta ialah struktur data yang berkuasa yang membolehkan anda menyimpan pasangan nilai kunci. Peta bersarang, yang mana nilainya ialah peta sendiri, boleh menjadi cara yang berguna untuk menyusun data yang kompleks.

Masalah

Walau bagaimanapun, sesetengah pembangun telah menghadapi masalah semasa bekerja dengan peta bersarang. Sebagai contoh, coretan kod berikut berjaya dijalankan:

func main() {
    var data = map[string]string{}
    data["a"] = "x"
    data["b"] = "x"
    data["c"] = "x"
    fmt.Println(data)
}

Dan begitu juga dengan yang berikut:

func main() {
    var data = map[string][]string{}
    data["a"] = append(data["a"], "x")
    data["b"] = append(data["b"], "x")
    data["c"] = append(data["c"], "x")
    fmt.Println(data)
}

Tetapi kod berikut panik semasa masa jalan:

func main() {
    var data = map[string]map[string]string{}
    data["a"]["w"] = "x"
    data["b"]["w"] = "x"
    data["c"]["w"] = "x"
    fmt.Println(data)
}

Penjelasan

Isu timbul kerana nilai sifar untuk jenis peta dalam Go adalah sifar, menunjukkan bahawa peta itu tidak dimulakan. Percubaan untuk mengakses atau menyimpan nilai dalam peta sifar mengakibatkan panik masa jalan.

Dalam contoh terakhir, peta data (luar) dimulakan, tetapi ia tidak mempunyai entri. Apabila anda mengindeksnya seperti data["a"], memandangkan belum ada entri dengan kunci "a", mengindeks ia mengembalikan nilai sifar jenis nilai, iaitu sifar untuk peta. Menugaskan kepada data"a" kemudian menjadi percubaan untuk menetapkan kepada peta sifar, mengakibatkan panik.

Penyelesaian

Untuk mengelakkan isu ini, anda mesti memulakan peta sebelum menyimpan elemen di dalamnya . Ini boleh dilakukan dalam beberapa cara:

  • Mulakan peta luar dengan literal komposit:
var data = map[string]map[string]string{
    "a": {},
    "b": {},
    "c": {},
}
  • Gunakan make fungsi:
var data = make(map[string]map[string]string)
  • Memulakan peta dalaman secara individu:
var data = map[string]map[string]string{}

data["a"] = map[string]string{}
data["b"] = make(map[string]string)
data["c"] = make(map[string]string)

Selepas permulaan, anda boleh selamat simpan nilai dalam peta bersarang.

Atas ialah kandungan terperinci Bagaimanakah Saya Mengelakkan Panik Masa Jalanan Apabila Menggunakan Peta Bersarang dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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