Unmarshal parses the JSON-encoded data and stores the result in the value pointed to by v. If v is nil or not a pointer, Unmarshal returns an InvalidUnmarshalError.
v に渡せるのはnilじゃないポインタだけ
値はもちろんダメ
ポインタ型でも nil じゃダメ
code:go
type V struct {
Foo string json:"foo"
}
func main() {
src := []byte({ "foo": "bar" })
{
var v V
err := json.Unmarshal(src, v)
fmt.Println(err, v) // => Error
}
{
var v V
err := json.Unmarshal(src, &v)
fmt.Println(err, v) // => {bar}
}
{
var v *V
err := json.Unmarshal(src, v)
fmt.Println(err, v) // => Error
}
{
var v *V
err := json.Unmarshal(src, &v)
fmt.Println(err, v) // => &{bar}
}
}