Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Go Basics: Mengapa nol Slices menerima nilai baharu, tetapi nil Maps tidak

Go Basics: Mengapa nol Slices menerima nilai baharu, tetapi nil Maps tidak

Patricia Arquette
Patricia Arquetteasal
2024-10-01 06:27:29250semak imbas

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

  • Tuding kepada tatasusunan asas
  • Panjang hirisan
  • Kapasiti kepingan

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]

  • Adakah Go menyokong Pass By Ref ?
  • baharu lwn buatan dalam Go
  • Adakah Go menyokong Warisan ?
  • Bagaimana untuk mencipta pelayan web ringkas dalam Go ?

Untuk mengetahui lebih lanjut tentang topik sedemikian bersama contoh kod, sila semak repo Github saya:

Go Basics: Why nil Slices accept new values, but nil Maps don Sai7xp / belajar-golang

Asas GoLang kepada Lanjutan. Termasuk Corak Reka Bentuk, Prinsip SOLID & banyak lagi

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!

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