title: Golang convert interface{} to struct
body: <p>I want to improve the getCustomerFromDTO method in the code below, I need to create a struct from an interface{} and currently i need to marshall that interface to byte[] and then unmarshal the array to my struct - there must be a better way.</p>
  
  <p>My use case is that I send structs via rabbitmq and to send them I use this general DTO wrapper that has additional domain specific data about them. 
  When I receive the DTO from rabbit mq one layer below the message is unmarshaled to my DTO and then i need to get my struct from that DTO.</p>
  
  <pre><code>type Customer struct {
      Name string `json:"name"`
  }
  
  type UniversalDTO struct {
      Data interface{} `json:"data"`
      // more fields with important meta-data about the message...
  }
  
  func main() {
      // create a customer, add it to DTO object and marshal it
      customer := Customer{Name: "Ben"}
      dtoToSend := UniversalDTO{customer}
      byteData, _ := json.Marshal(dtoToSend)
  
      // unmarshal it (usually after receiving bytes from somewhere)
      receivedDTO := UniversalDTO{}
      json.Unmarshal(byteData, &amp;receivedDTO)
  
      //Attempt to unmarshall our customer
      receivedCustomer := getCustomerFromDTO(receivedDTO.Data)
      fmt.Println(receivedCustomer)
  }
  
  func getCustomerFromDTO(data interface{}) Customer {
      customer := Customer{}
      bodyBytes, _ := json.Marshal(data)
      json.Unmarshal(bodyBytes, &amp;customer)
      return customer
  }
  </code></pre>