有以下内容:type FlexInt intfunc (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) == fifi
2 回答
阿晨1998
TA贡献2037条经验 获得超6个赞
该表达式转换 fi
为*int
. 结果包含相同的地址,但具有不同的类型。
如果将 a*FlexInt
传递给json.Unmarshal
,则将json.Unmarshal
调用*FlexInt.UnmarshalJSON
调用的方法json.Unmarshal
,依此类推。
噜噜哒
TA贡献1784条经验 获得超7个赞
它是相同的指针,但类型不同。当使用包含 a 的json.Unmarshal
an 调用时,它会调用的方法。当使用包含 an 的 an调用它时,它使用内置行为。由于和具有相同的基础类型,因此可以将指向一个的指针转换为指向另一个的指针,但这是接口将标记的“实际”类型。interface{}
FlexInt*
FlexInt
UnmarshalJSON
interface{}
int*
FlexInt
int
- 2 回答
- 0 关注
- 111 浏览
添加回答
举报
0/150
提交
取消