code: func (r *MemoryTTL) StartGC(gcInterval time.Duration) {
  	if gcInterval <= 0 {
  		return
  	}
  
  	ticker := time.NewTicker(gcInterval)
  	done := make(chan struct{})
  
  	r.Lock()
  	r.gcTicker = ticker
  	r.done = done
  	r.Unlock()
  
  	go func() {
  		for {
  			select {
  			case <-ticker.C:
  				now := time.Now()
  
  				r.Lock()
  				for key := range r.cache.items {
  					if !r.isValidTime(key, now) {
  						r.delete(key)
  					}
  				}
  				r.Unlock()
  			case <-done:
  				return
  			}
  		}
  	}()
  }
docs: // StartGC starts the garbage collection process in a go routine