ホームページ > バックエンド開発 > Golang > Go の基本: nil スライスは新しい値を受け入れるのに、nil マップは受け入れない理由

Go の基本: nil スライスは新しい値を受け入れるのに、nil マップは受け入れない理由

Patricia Arquette
リリース: 2024-10-01 06:27:29
オリジナル
277 人が閲覧しました

New values can be added to Nil Slice but adding new values to Nil Map throws a runtime error. Let's see why

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
ログイン後にコピー

Why appending to a Nil Slice works:
Slice is a reference to an underlying array and dynamically-sized data structure. It consists of 3 components

  • Pointer to underlying array
  • Length of slice
  • Capacity of slice

When we declare a nil slice, the length and capacity will be zero and it doesn't point to any underlying array. Basically append operation checks the capacity and if it's not sufficient then it allocates new underlying array with enough capacity to store the new elements and returns a new slice that points to newly created array. So append works as expected.

Why adding to a Nil Map doesn't work:
Map in golang basically acts as a hash table and the internal data structures needs to be initialized first before we can store the key-value pair.

When we declare a map as nil (var m map[string]int), it is uninitialized and not yet ready to store key-value pairs. So this will create a runtime error when we try to add values to a nil map. To avoid such errors create map using 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]
ログイン後にコピー

  • Does Go supports Pass By Ref ?
  • new vs make in Go
  • Does Go supports Inheritance ?
  • How to create a simple web server in Go ?

To learn more about such topics along with code examples, feel free to checkout my Github repo:

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

GoLang Basics to Advanced. Including Design Patterns, SOLID Principles & more

以上がGo の基本: nil スライスは新しい値を受け入れるのに、nil マップは受け入れない理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート