开始尝试golang,并且正在寻找一个自定义的json.Unmarshal。在一篇博客文章中,他有以下内容:
type FlexInt int
func (fi *FlexInt) UnmarshalJSON(data []byte) error {
if data[0] != '"' {
return json.Unmarshal(data, (*int)(fi))
}
var s string
if err := json.Unmarshal(data, &s); err != nil {
return err
}
i, err := strconv.Atoi(s)
if err != nil {
return err
}
*fi = FlexInt(i)
return nil
}我知道它在做什么--但我不理解(*int)(fi)部件。查看fi指针的值,它与(*int)(fi) - (*int)(fi) == fi相同。然而,当我将这一行改为简单的fi时,它会进行无限循环
发布于 2019-07-12 03:31:31
表达式converts fi to an *int。结果包含相同的地址,但具有不同的类型。
如果*FlexInt被传递给json.Unmarshal,那么json.Unmarshal将调用*FlexInt.UnmarshalJSON方法,该方法调用json.Unmarshal,依此类推。
https://stackoverflow.com/questions/56996074
复制相似问题