VK / ВК (ВКонтакте) - 4
Актуальность: 1 кв 2026
Задача: Нужно написать сервис. На вход сервису поступают обновления документов: go/basics
Заголовок раздела «Задача: Нужно написать сервис. На вход сервису поступают обновления документов: go/basics»type Document struct { Url string `json:"url "db:"url "` PubDate uint64 `json:"pub_date "db:"pub_date "` FetchTime uint64 `json:"fetch_time "db:"fetch_time "` Text string `json:"text "db:"text "` FirstFetchTime *uint64 `json:"first_fetch_time "db:"first_fetch_time "`}Документы могут поступать в произвольном порядке (не в том, как они обновлялись), также возможно дублирование отдельных сообщений.
Задача: Необходимо на выходе формировать такие же сообщения, но с исправленными отдельными полями по следующим правилам (все нижеуказанное - для группы документов с совпадающим полем Url): go/basics
Заголовок раздела «Задача: Необходимо на выходе формировать такие же сообщения, но с исправленными отдельными полями по следующим правилам (все нижеуказанное - для группы документов с совпадающим полем Url): go/basics»- Поле Text и FetchTime должны быть такими, какими были в документе с наибольшим FetchTime, полученным на данный момент;
- Поле PubDate должно быть таким, каким было у сообщения с наименьшим FetchTime;
- Поле FirstFetchTime должно быть равно минимальному значению FetchTime.
Т.е. если отсортировать документы по FetchTime, то в каждый момент времени мы берем PubDate и FirstFetchTime от самой первой из полученных, а Text - от самой последней.
func (s *Service) Process(ctx context.Context, doc *Document) (*Document, error)Интерфейс в коде можно реализовать таким
Заголовок раздела «Интерфейс в коде можно реализовать таким»Данный код будет работать в сервисе, читающим входные сообщения из очереди сообщений (Kafka или подобное), и записывающем результат также в очередь. Если Process возвращает Null - то в очередь ничего не пишется.