Если метаданные являются динамическими, то обрабатываются как interface{}
.Если вы знаете, что это всегда будет контейнер JSON, тогда вы можете сделать map[string]interface{}
для удобства.Существует также json.RawMessage
, если вы не обязательно хотите использовать утверждения типа, чтобы увидеть, что внутри него, а просто хотите сохранить JSON (я предполагаю, что это то, что вы надеялись сделать, установив его в строку).
type Chats struct {
Id string `json:"id"`
Datetime string `json:"date"`
Metadata interface{} `json:"metadata"`
}
type Chats struct {
Id string `json:"id"`
Datetime string `json:"date"`
Metadata map[string]interface{} `json:"metadata"`
}
type Chats struct {
Id string `json:"id"`
Datetime string `json:"date"`
Metadata json.RawMessage `json:"metadata"`
}