Middle+
32
Bucket-терден ескірген деректерді кезең-кезеңімен жою үшін cleanup функциясын жүзеге асырыңыз. Артқы жоспардағы goroutine-ді қалай ұйымдастыруға болады?
Сұралған компаниялар
ООО Дэстэн Партнерс
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 удаляет устаревшие данные по заданному критерию.
Таким образом, фоновая горутина постоянно работает и поддерживает данные в актуальном состоянии.