├── .gitignore ├── README.md └── service.go /.gitignore: -------------------------------------------------------------------------------- 1 | # JetBrains 2 | .idea/ 3 | 4 | # OS X 5 | .DS_Store 6 | 7 | # Binaries for programs and plugins 8 | *.exe 9 | *.exe~ 10 | *.dll 11 | *.so 12 | *.dylib 13 | 14 | # Test binary, built with `go test -c` 15 | *.test 16 | 17 | # Output of the go coverage tool, specifically when used with LiteIDE 18 | *.out 19 | 20 | # Dependency directories (remove the comment below to include it) 21 | # vendor/ 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Тестовое задание для Golang разработчика 2 | 3 | Тестовое задание для кандидата на должность Golang разработчика. 4 | 5 | ## Описание 6 | 7 | Есть внешний сервис, который обрабатывает некие абстрактные объекты батчами. Данный сервис может обрабатывать только 8 | определенное количество элементов `n` в заданный временной интервал `p`. При превышении ограничения, сервис блокирует 9 | последующую обработку на долгое время. 10 | 11 | Задача заключается в реализации клиента к данному внешнему сервису, который позволит обрабатывать максимально возможное 12 | количество объектов без блокировки. Приводить реализацию внешнего сервиса **необязательно**! 13 | 14 | Определение сервиса можно посмотреть [здесь](./service.go). 15 | 16 | ## Требования 17 | 18 | - решение должно быть в git-репозитории (можно прислать архив или опубликовать на github, gitlab, bitbucket...). 19 | 20 | ## Пожелания 21 | 22 | - документирование кода; 23 | - тесты; 24 | - использование статического анализатора (конфигурацию положить в репозиторий). 25 | -------------------------------------------------------------------------------- /service.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "context" 5 | "errors" 6 | "time" 7 | ) 8 | 9 | // ErrBlocked reports if service is blocked. 10 | var ErrBlocked = errors.New("blocked") 11 | 12 | // Service defines external service that can process batches of items. 13 | type Service interface { 14 | GetLimits() (n uint64, p time.Duration) 15 | Process(ctx context.Context, batch Batch) error 16 | } 17 | 18 | // Batch is a batch of items. 19 | type Batch []Item 20 | 21 | // Item is some abstract item. 22 | type Item struct{} 23 | --------------------------------------------------------------------------------