牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

golang の map[string]bool{} を空にしてみるメモ

(go17.1)

package main

import (
    "fmt"
)

func main() {
    fmt.Println("---a := map[string]bool{}")
    a := map[string]bool{}
    fmt.Printf("%v\n", a)
    fmt.Printf("%v\n", a["hoge"])

    fmt.Println("---a[\"hoge\"] = true")
    a["hoge"] = true
    fmt.Printf("%v\n", a)
    fmt.Printf("%v\n", a["hoge"])

    fmt.Println("--- make(map[string]bool)")
    // a を空に
    a = make(map[string]bool)
    fmt.Printf("%v\n", a)
    fmt.Printf("%v\n", a["hoge"])
    fmt.Println("---a[\"hoge\"] = true")
    a["hoge"] = true
    fmt.Printf("%v\n", a)
    fmt.Printf("%v\n", a["hoge"])

    fmt.Println("---a = nil")
    // a に nil を入れると空になるが
    a = nil
    fmt.Printf("%v\n", a)
    fmt.Printf("%v\n", a["hoge"])

    fmt.Println("---a[\"fuga\"] = true")
    // a に nil を入れた後に要素を入れるとエラーになる
    a["moge"] = true
    fmt.Printf("%v\n", a)
    fmt.Printf("%v\n", a["moge"])
}

実行結果

---a := map[string]bool{}
map[]
false
---a["hoge"] = true
map[hoge:true]
true
--- make(map[string]bool)
map[]
false
---a["hoge"] = true
map[hoge:true]
true
---a = nil
map[]
false
---a["fuga"] = true
panic: assignment to entry in nil map

goroutine 1 [running]:
main.main()
    /Users/hoge/examples/hoge.go:36 +0x790
exit status 2