可以將新值新增至 Nil Slice,但將新值新增至 Nil Map 會引發執行階段錯誤。讓我們看看為什麼
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
為什麼附加到 Nil 切片有效:
Slice 是對底層數組和動態大小的資料結構的引用。它由 3 個組件組成
當我們聲明一個 nil 切片時,長度和容量將為零,並且它不指向任何底層數組。基本上追加作業會檢查容量,如果容量不夠,則會指派具有足夠容量的新底層陣列來儲存新元素,並傳回一個指向新建立陣列的新切片。所以追加工作照預期進行。
為什麼要加到 Nil Map 不行:
golang中的Map基本上充當哈希表,在儲存鍵值對之前需要先初始化內部資料結構。
當我們將一個映射宣告為 nil (var m map[string]int) 時,它尚未初始化,還沒有準備好儲存鍵值對。因此,當我們嘗試在 nil 映射中新增值時,這會產生運行時錯誤。為了避免此類錯誤,請使用 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]
要了解有關此類主題的更多資訊以及程式碼範例,請隨時查看我的 Github 儲存庫:
以上是Go 基礎:為什麼 nil Slices 接受新值,但 nil Map 不接受的詳細內容。更多資訊請關注PHP中文網其他相關文章!