Rumah > Artikel > pembangunan bahagian belakang > Go Basics: Mengapa nol Slices menerima nilai baharu, tetapi nil Maps tidak
Nilai baharu boleh ditambahkan pada Slice Nil tetapi menambah nilai baharu pada Peta Nil akan menimbulkan ralat masa jalan. Jom tengok kenapa
var slice []int // nil slice slice = append(slice, 1) // append works as expected fmt.Println(slice) // [1] var m map[string]int // nil map m["one"] = 1 // ? Runtime panic: assignment to entry in nil map
Mengapa penambahan pada Nil Slice berfungsi:
Slice ialah rujukan kepada tatasusunan asas dan struktur data bersaiz dinamik. Ia terdiri daripada 3 komponen
Apabila kami mengisytiharkan kepingan sifar, panjang dan kapasiti akan menjadi sifar dan ia tidak menghala ke mana-mana tatasusunan asas. Pada asasnya operasi tambah menyemak kapasiti dan jika ia tidak mencukupi maka ia memperuntukkan tatasusunan asas baharu dengan kapasiti yang mencukupi untuk menyimpan elemen baharu dan mengembalikan kepingan baharu yang menunjuk kepada tatasusunan yang baru dibuat. Jadi tambah berfungsi seperti yang diharapkan.
Mengapa menambahkan Peta Nihil tidak berfungsi:
Peta dalam golang pada asasnya bertindak sebagai jadual cincang dan struktur data dalaman perlu dimulakan terlebih dahulu sebelum kita boleh menyimpan pasangan nilai kunci.
Apabila kami mengisytiharkan peta sebagai sifar (var m map[string]int), ia tidak dimulakan dan belum bersedia untuk menyimpan pasangan nilai kunci. Jadi ini akan mencipta ralat masa jalan apabila kami cuba menambah nilai pada peta sifar. Untuk mengelakkan ralat sedemikian buat peta menggunakan make
var m map[string]int // nil map m = make(map[string]int) // initialize it m["one"] = 1 // map is now initialized, so we can add values print(m) // map[one:1]
Untuk mengetahui lebih lanjut tentang topik sedemikian bersama contoh kod, sila semak repo Github saya:
Atas ialah kandungan terperinci Go Basics: Mengapa nol Slices menerima nilai baharu, tetapi nil Maps tidak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!