You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package operation
import ( "errors" "strconv" "time" )
type VidInfo struct { Locations []Location NextRefreshTime time.Time } type VidCache struct { cache []VidInfo }
func (vc *VidCache) Get(vid string) ([]Location, error) { id, _ := strconv.Atoi(vid) if 0 < id && id <= len(vc.cache) { if vc.cache[id-1].Locations == nil { return nil, errors.New("Not Set") } if vc.cache[id-1].NextRefreshTime.Before(time.Now()) { return nil, errors.New("Expired") } return vc.cache[id-1].Locations, nil } return nil, errors.New("Not Found") } func (vc *VidCache) Set(vid string, locations []Location, duration time.Duration) { id, _ := strconv.Atoi(vid) if id >= len(vc.cache) { for i := id - len(vc.cache); i > 0; i-- { vc.cache = append(vc.cache, VidInfo{}) } }
vc.cache[id-1].Locations = locations vc.cache[id-1].NextRefreshTime = time.Now().Add(duration)
}
|