首頁 > 後端開發 > Golang > Go 基礎:為什麼 nil Slices 接受新值,但 nil Map 不接受

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

Patricia Arquette
發布: 2024-10-01 06:27:29
原創
270 人瀏覽過

可以將新值新增至 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]
登入後複製

  • 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 原則等

以上是Go 基礎:為什麼 nil Slices 接受新值,但 nil Map 不接受的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板