1. Задача: Написать in-memory кэш с поддержкой TTL и функций работы с заказами, а также написать тестовые сценарии использования
type UserProfile struct {
UUID string
Name string
Orders []Order
}
type Order struct {
UUID string
CreatedAt time.Time
UpdatedAt time.Time
Basket interface{}
}Ответ
type Cache struct {
storage map[string]UserProfile
times map[string]time.Time
ttl time.Duration
mu sync.RWMutex
}
func (c *Cache) GetProfile(uuid string) (UserProfile, error) {
c.mu.RLock()
defer c.mu.RUnlock()
profile, ok := c.storage[uuid]
if !ok {
return UserProfile{}, errors.New("not found")
}
if time.Since(c.times[profile.UUID]) < c.ttl {
return profile,…