Пусть ObjectID
реализует интерфейс Unmarshaler
и проверит наличие пустой строки:
func (o *ObjectID) UnmarshalJSON(data []byte) error {
if err := json.Unmarshal(data, o); err != nil {
return err
}
if string(*o) == "" {
o = nil
}
return nil
}
Если тип ObjectID
импортирован из другого пакета, вы можете создать новый тип, который переносит этотип:
// objID is a copy of primitive.ObjectID but with it's own json unmarshalling.
type objID struct {
*primitive.ObjectID
}
func (o *objID) UnmarshalJSON(data []byte) error {
// Same implementation as above
}
Эта статья объясняет это более подробно.