为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 地址运算符和 (*int)(Type) 语法

Golang 地址运算符和 (*int)(Type) 语法

Go
ibeautiful 2023-07-04 09:57:42
有以下内容: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,依此类推。


查看完整回答
反对 回复 2023-07-04
?
噜噜哒

TA贡献1784条经验 获得超7个赞

它是相同的指针,但类型不同。当使用包含 a 的json.Unmarshalan 调用时,它会调用的方法。当使用包含 an 的 an调用它时,它使用内置行为。由于和具有相同的基础类型,因此可以将指向一个的指针转换为指向另一个的指针,但这是接口将标记的“实际”类型。interface{}FlexInt*FlexIntUnmarshalJSONinterface{}int*FlexIntint

查看完整回答
反对 回复 2023-07-04
  • 2 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信