http://konboi.hatenablog.com/entry/2014/11/07/155418 これへの自分なりの回答です。元ブログのタイトルは const になってますが、多分 struct のことですかね。
Golang では var
を使えば変数が定義できますが、このときに型を指定する必要があります。
var name string
この型のところに struct を置いてやることができます。
var user struct {
Name string
Age int
}
よく考えればまぁできますよねという感じです。
これを応用すると、元ブログの例は下記のように書けます。
package main
import (
"bytes"
"encoding/json"
"fmt"
)
func main() {
b := []byte(`{"foo": "bar", "hoge": {"fuga": "hoga"}}`)
dec := json.NewDecoder(bytes.NewReader(b))
var jsonData struct {
Foo string `json:"foo"`
Hoge struct {
Fuga string `json:"fuga"`
} `json:"hoge"`
}
dec.Decode(&jsonData)
fmt.Println(jsonData)
fmt.Println(jsonData.Hoge.Fuga)
}
http://play.golang.org/p/nTCdrMxYoQ
ただしこの方法は本当にどんな内容が返ってくるか分からない時には使えない(例えば返ってくる json が {“foo”: “bar”} なのか {“bar”: “foo”} なのか分からない時など)のでその時は元の記事のように interface{}
で受け取って型アサーションしてやる必要があります。