Начинал поиграться с 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
, она делает бесконечный цикл