1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Go】マップへの値追加時に発生する「panic: assignment to entry in nil map」

Posted at

はじめに

Go言語でキーがint型、バリューがbool型のマップを作成したいです。初期化時は空で生成し、値は後から追加していきます。

初期化して値を追加したらエラーになりました。

var m map[int]bool 
m[1] = true
# エラー
panic: assignment to entry in nil map
# 日本語訳「パニック: nil マップのエントリへの代入」

原因:マップが初期化されていない

var m map[int]boolで初期化したつもりでしたが、これは宣言しただけでまだ初期化されていません。
なのでmはnilの状態です。nilのマップに値を追加しようとすると上記のようなエラーになります。

var m map[int]bool 
fmt.Println(m == nil) // true

対策:マップを正しく初期化する

初期化方法は3種類あります。

方法1:make関数を利用

m := make(map[int]bool)

// 確認
fmt.Println(m == nil) // false
m[1] = true
fmt.Println(m) // map[1:true]

方法2:宣言と同時に空のリテラルで初期化

m := map[int]bool{} 

// 確認
fmt.Println(m == nil) // false
m[1] = true
fmt.Println(m) // map[1:true]

方法3:宣言後に改めて空のリテラルで初期化

これももちろんできますが、冗長ですね。

var m map[int]bool
m = map[int]bool{}

// 確認
fmt.Println(m == nil) // false
m[1] = true
fmt.Println(m) // map[1:true]

終わりに

Goはまだまだ基礎でつまづくことが多いですが、1つ1つ丁寧に調べて理解して慣れていきたいです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?