Back to questions
Middle+
3
Реализуйте функцию cleanup для периодической очистки устаревших данных из bucket'ов. Как организовать фоновую горутину?
Companies where asked
ООО Дэстэн Партнерс
Answer from AI
sobes.tech AI
Для реализации функции cleanup, которая периодически очищает устаревшие данные из bucket'ов, можно использовать горутину с таймером, которая будет запускаться в фоне и выполнять очистку с заданным интервалом.
Пример реализации:
package main
import (
"time"
"fmt"
)
type Bucket struct {
data map[string]time.Time // пример: ключ и время добавления
}
func (b *Bucket) Cleanup(expiration time.Duration) {
now := time.Now()
for key, t := range b.data {
if now.Sub(t) > expiration {
delete(b.data, key)
fmt.Println("Удалён устаревший ключ:", key)
}
}
}
func cleanup(buckets []*Bucket, interval time.Duration, expiration time.Duration) {
ticker := time.NewTicker(interval)
defer ticker.Stop()
for {
select {
case <-ticker.C:
for _, b := range buckets {
b.Cleanup(expiration)
}
}
}
}
func main() {
buckets := []*Bucket{
{data: make(map[string]time.Time)},
{data: make(map[string]time.Time)},
}
// Запускаем фоновую горутину для очистки каждые 10 секунд
go cleanup(buckets, 10*time.Second, 1*time.Minute)
// Основной код
select {} // блокируем main, чтобы программа не завершилась
}
Здесь:
cleanup— функция, запускающаяся в отдельной горутине и вызывающая очистку по таймеру.- Используется
time.Tickerдля периодического срабатывания. - Метод
Cleanupу каждого bucket удаляет устаревшие данные по заданному критерию.
Таким образом, фоновая горутина постоянно работает и поддерживает данные в актуальном состоянии.