Как создать поведение миксина в голанге?

# #go #model #mixins

Вопрос:

Для http-сервера я хочу скрыть работу с http.ResponseWriter ним , удалив его из интерфейса как слишком сложный для простых задач. Таким образом, мои контроллеры будут принимать только запрос и возвращать ответ, который я хочу отправить:

 func SampleController(r *http.Request) *Response {  if something {  return BadRequestResponse("something bad happened")  }  return MakeMyModelResponse("actual model response") }  type Response interface {  GetStatusCode() int  GetContentType() string  GetContent() []byte }  func ResponseAdaptor(controller func (r *http.Request) Response) http.HandleFunc {  return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {  response := controller(r)  headers := w.Header()  headers.Set(HeaderContentType, response.ContentType())  w.WriteHeader(response.StatusCode())  _, _ = w.Write(response.GetContent())  }) }  

затем я хочу создать реализацию по умолчанию, которая будет действовать как ответ объекта json

 type JSONResponse struct{}  func (c *JSONResponse) GetContentType() string { return AppJson } func (c *JSONResponse) GetStatusCode() string { return http.StatusOK }  func (c *JSONResponse) GetContent() []byte {  payload, _ := json.Marshal(/*problem is here, what to pass here?*/)  return payload }  

Я хочу иметь возможность просто встроить свой «микс» (я хочу, чтобы он вел себя так) в любую структуру ответа модели, чтобы он был упорядочен с помощью getContent, и мне не нужно вводить для него много кода:

 type MyModelResponse struct {  Result string `json:"result"`  JSONResponse // i feel every1 will immediately understood what i want to achieve with it here. how to tell it compiler now? }  func MakeMyModelResponse(result string) *MyModelResponse {  return amp;MyModelResponse{  Result: result,  } }  

Есть какие-нибудь идеи? (хорошо, что не следует добавлять много строк кода в любую новую MyModelResponse структуру для любой новой модели. В идеале должна быть 1 строка структуры кода, которая сообщит компилятору, что я хочу смешать поведение по умолчанию с типичным ответом json 200 ок)