新值可以加入 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 有效:
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 儲存庫:
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3