Home > other >  Correct pattern to use for a function unmarshaling into a struct?
Correct pattern to use for a function unmarshaling into a struct?

Time:11-05

I have a function, callAPI, with a return-type interface{}.

I have a struct, Company, in which I want to Unmarshal() the resulting JSON from callAPI().

Should I instead have callAPI() return a Company{}?

Or, should I have callAPI() return []byte, and then Unmarshal() into a Company?

Or, is there another way to accomplish what I'm trying to achieve?

CodePudding user response:

Pass a pointer to the target value as an argument. Pass the pointer value through to json.Unmarshal:

func callAPI(a1 T1, a2 T2, v interface{}) error {
    // use a1, a2, ... to get API response []byte, p
    return json.Unmarshal(p, v)
}

Call it like this:

var c Company
err := callAPI(a1, a2, &c)
if err != nil {
     // handle error
}
// Use company.

Replace the placeholders a1, a2, T1 and T2 with whatever arguments are appropriate for your function.

Run an example on the playground.

  •  Tags:  
  • go
  • Related