」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Go 基礎:為什麼 nil Slices 接受新值,但 nil Map 不接受

Go 基礎:為什麼 nil Slices 接受新值,但 nil Map 不接受

發佈於2024-11-01
瀏覽:831

新值可以加入 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]

  • Go支持Pass By Ref嗎?
  • Go 中的 new 與 make
  • Go支持繼承嗎?
  • 如何在 Go 中建立一個簡單的 Web 伺服器?

要了解有關此類主題的更多資訊以及程式碼範例,請隨時查看我的 Github 儲存庫:

Go Basics: Why nil Slices accept new values, but nil Maps don 賽7xp / 學習golang

Go 語言基礎到高階。包括設計模式、SOLID 原則等

版本聲明 本文轉載於:https://dev.to/sai7xp/go-basics-why-nil-slices-accept-new-values-but-nil-maps-dont-23l0?1如有侵犯,請洽study_golang@163 .com刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3