У меня есть интерфейс EventAggregation, который реализован многими различными типами. Мне нужно обогатить все эти типы одними и теми же двумя полями, поэтому я делаю что-то вроде этого:
type messagePayload struct {
domain.EventAggregation
SourceSystem string `json:"sourceSystem"`
MessageTimestamp int `json:"messageTimestamp"`
}
Затем я перевожу это в строку с помощью этого метода:
func (payload messagePayload) payloadToString() string {
jsonForm, _ := json.Marshal(payload)
return string(jsonForm)
}
Но он создает строку с «EventAggregation» в качестве ключа, и поля внедряются как объект в него, например:
{"EventAggregation":{"startTime":1575941942501,"endTime":1581461995869,"computeTimestamp":1582573485983,"eventType":"foo","count":146692},"sourceSystem":"bar","messageTimestamp":1582573497406}
Как создать строку таким образом, чтобы поля внутри EventAggregation находятся на одном уровне с полями «SourceSystem» и «MessageTimestamp»? Например:
{"startTime":1575941942501,"endTime":1581461995869,"computeTimestamp":1582573485983,"eventType":"foo","count":146692,"sourceSystem":"bar","messageTimestamp":1582573497406}
Тот же код работает, если внедренный объект является структурой, а не интерфейсом, но это не очень практично, учитывая, сколько различных структур реализуют интерфейс "EventAggregation".