golang で {"key1":"value1", "key2":"value2"} のJSON字列を map[string]string に変換する(golang json to map)

なぜか苦戦したのでメモしておく。

https://gobyexample.com/json

ここに書いてある。

上記から抜粋したのが以下。
json.Unmarshal() の第一引数が []byte になっているので、string の場合は変換してあげる必要がある。

var dat map[string]interface{}
if err := json.Unmarshal(byt, &dat); err != nil {
    panic(err)
}

fmt.Println(dat)

num := dat["num"].(float64)
fmt.Println(num)

で、dat にJSON文字列の値が入ってくる。
ただ、dat の value 部分は interface{} なので、
利用する際は以下のように type assertion を利用して、目的の型に変換する必要がある。

num := dat["num"].(float64)

仮にJSON文字列のvalueにstringしか入ってこない場合は以下のように
interface{} を string にできる。

var dat map[string]string

string の代わりに int が入ってきた場合は json.Unmarshal() で以下のエラーがでる。

json: cannot unmarshal number into Go value of type string