Могу ли я использовать MarshalJSON для добавления произвольных полей в кодировку json в golang?

Предположим, я написал следующий фрагмент кода. Полный код на детской площадкеВот для тех, кто склонен.

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))
}

Этот код выводит следующее, как я и ожидал:

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

Предположим, на мгновение я хотел добавить поле в вывод JSON, не включая его вBook структура. Возможно жанр

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

Могу ли я использоватьMarshalJSON() добавить произвольное поле в полезную нагрузку JSON наMarshal()? Что-то вроде:

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

Другойответы Заставь меня думать, что это возможно, но я изо всех сил пытаюсь выяснить реализацию.

Ответы на вопрос(3)

Ваш ответ на вопрос