Starting to play around with golang
and was looking at a custom json.Unmarshal
. In a blog post the had the following:
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
}
And I understand what it is doing - but I dont understand (*int)(fi)
part. Looking at the value of the fi
pointer it is the same as (*int)(fi)
- (*int)(fi) == fi
. Yet when I change that line to simply fi
it then does an infinite loop