一级nil指针
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
js:="{\"name\":\"jax\",\"age\":30}"
var pptr *Person
err := json.Unmarshal([]byte(js), pptr)
if err != nil {
fmt.Println(err)
}
fmt.Println(pptr)
}
会打印出
json: Unmarshal(nil *main.Person)
<nil>
当把err := json.Unmarshal([]byte(js), pptr)
改成err := json.Unmarshal([]byte(js), &pptr)
却可以解出数据,打印:
&{jax 30}
``
var pptr *Person这种方式你只是定义了一个指针变量,这个指针并没有指向任何有效的内存地址,也就是说他是nil,json解析的时候就会报错,你可以new一个地址后再做json解析,就不会报错了。