我已经实现了一个自定义JSON解组器,但由于某种原因,它不会返回正确的值 - 所有字段都返回零。
例如:
{:array, :string}
https://play.golang.org/p/LuXkZQZHWz
上面的代码显示了输出:type test struct {
t string
}
func New(data string) (*test, error) {
return &test{t: data}, nil
}
func (t *test) UnmarshalJSON(b []byte) error {
tt, err := New(string(b))
if err != nil {
return err
}
t = tt
return nil
}
func main() {
str := `"hello"`
b := []byte(str)
t := &test{}
err := json.Unmarshal(b, t)
if err != nil {
fmt.Printf("unmarshal error occurred: %#v", err)
}
fmt.Printf("%#v", t)
}
为什么它没有解决这些领域?即&main.test{t:""}
只有当我取消引用上面的指针时,才能得到所需的结果。
即 -
&main.test{t:"hello"}
答案 0 :(得分:1)
您将局部变量t
(指向test
的指针)分配给局部变量tt
的值,也是指向test
的指针。这对原始指针t
指向的值没有影响。您必须取消引用指针以更改它指向的值,而不是更改本地指针本身:
*t = *tt