Posso usar MarshalJSON para adicionar campos arbitrários a uma codificação json em golang?

Suponha que eu escrevi o seguinte trecho de código. Código completo no parquinhoaqui para aqueles 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))
}

Esse código gera o seguinte, exatamente como eu esperava:

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

Suponha que, por um momento, eu queira adicionar um campo à saída JSON sem incluí-lo noBook struct. Talvez um gênero:

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

Eu posso usarMarshalJSON() para adicionar um campo arbitrário à carga útil JSON emMarshal()? Algo como:

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

De outrosrespostas faça-me pensar que isso deveria ser possível, mas estou lutando para descobrir a implementação.

questionAnswers(3)

yourAnswerToTheQuestion