自定义json unmarshaler返回空字段

时间:2017-10-13 16:35:59

标签: go

我已经实现了一个自定义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"}

1 个答案:

答案 0 :(得分:1)

您将局部变量t(指向test的指针)分配给局部变量tt的值,也是指向test的指针。这对原始指针t指向的值没有影响。您必须取消引用指针以更改它指向的值,而不是更改本地指针本身:

*t = *tt