使用Golang取消Pubmar请求数据[] bytes

I have an end-point that receives data from a Google PubSub request. As per this repo, the object is as so:

type pushRequest struct {
    Message struct {
        Attributes map[string]string
        Data       []byte
        ID         string `json:"message_id"`
    }
    Subscription string
}

The Data field is consistently formatted as so:

type Data struct {
    Key  string                 `json:"key"`
    Body string                 `json:"body"`
    Meta map[string]interface{} `json:"meta"`
}

I can obvious unmarshal the JSON request with something like this:

f := &pushRequest{}
json.Unmarshal(msg, &f)

That leaves with the the []bytes field. Which I can do something like this to convert to a string, as per the docs

messages = append(messages, string(f.Message.Data))

Which doesn't help, since I need it as a struct.

I can Unmarshal the array again:

var m Data
json.Unmarshal(f.Message.Data, &m)

Have tried changing the field type in the pushRequest struct to Data without success. Blank...

Is there a way I can unpack things in a single pass? Doing twice seems ridiculous.

If it's obvious, I just cant see it!

decoder := json.NewDecoder(r.Body)
psmsg := &PushRequest{}
decoderErr := decoder.Decode(&psmsg)

if decoderErr != nil {
    // Error... 
    return
}

data := Data{}
unmarshalErr := json.Unmarshal([]byte(string(psmsg.Message.Data)), &data)

if unmarshalErr != nil {
    // Error...
    return
}