# filecache Пакет `filecache` занимается хранением кеша файлов и определяет протокол передачи файлов между частями системы. `filecache.Cache` управляет файлами и занимается контролем одновременного доступа. Вы можете реализовать этот тип поверх `*artifact.Cache`, поведение требуется точно такое же. ## Передача файлов Тип `filecache.Handler` реализует handler, позволяющий заливать и скачивать файлы из кеша. - Вызов `GET /file?id=123` должен возвращать содержимое файла с `id=123`. - Вызов `PUT /file?id=123` должен заливать содержимое файла с `id=123`. **Обратите внимание:** Несколько клиентов могут начать заливать в кеш один и тот же набор файлов. В наивной реализации, первый клиент залочит файл на запись, а следующие упадут с ошибкой. Ваш код должен обрабатывать эту ситуацию корректно, тоесть последующие запросы должны дожидаться, пока первый запрос завершится. Для реализации этой логики поведения вам поможет пакет [singleflight](https://godoc.org/golang.org/x/sync/singleflight).