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
Lepaskan: 2024-12-06 06:30:12
asal
243 orang telah melayarinya

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)
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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": {},
}
Salin selepas log masuk
  • Gunakan make fungsi:
var data = make(map[string]map[string]string)
Salin selepas log masuk
  • 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)
Salin selepas log masuk

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 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan