¿Puedo usar MarshalJSON para agregar campos arbitrarios a una codificación json en golang?

Supongamos que he escrito el siguiente fragmento de código. Código completo en el patio de recreoaquí para los inclinados

type Book struct {
  Title        string
  Author       string
}

func main() {
  ms := Book{"Catch-22", "Joseph Heller"}
  out, err := json.MarshalIndent(ms, "", "  ")
  if err != nil {
    log.Fatalln(err)
  }
  fmt.Println(string(out))
}

Este código genera lo siguiente, exactamente como esperaba:

{
  "Title": "Catch-22",
  "Author": "Joseph Heller"
}

Supongamos por un momento que quisiera agregar un campo a la salida JSON sin incluirlo en elBook estructura Quizás un género:

{
  "Title": "Catch-22",
  "Author": "Joseph Heller",
  "Genre": "Satire"
}

Puedo usarMarshalJSON() para agregar un campo arbitrario a la carga útil JSON enMarshal()? Algo como:

func (b *Book) MarshalJSON() ([]byte, error) {
    // some code
}

Otrorespuestas me hace pensar que esto debería ser posible, pero estoy luchando por descubrir la implementación.

Respuestas a la pregunta(3)

Su respuesta a la pregunta