If I understood it right, *s = *(*State)(&state)
copies the content at &state
to the s address (after casting *rawState
to *State
). But if it is that way, wouldn't it be more efficient to just do s = (*State)(&state)
instead of copying and *state
being collected by GC? Or could it lead to side-effects changing the value of s / or other reasons for doing it this way? Thanks!
complete function from [0]:
func (s *State) UnmarshalJSON(b []byte) error {
type rawState State
var state rawState
dec := json.NewDecoder(bytes.NewReader(b))
if s.useJSONNumber {
dec.UseNumber()
}
err := dec.Decode(&state)
if err != nil {
return err
}
*s = *(*State)(&state)
return s.Validate()}