code: func (r *RateLimiter) Try() (ok bool, remaining time.Duration) {
  	r.mtx.Lock()
  	defer r.mtx.Unlock()
  	now := time.Now()
  	if l := r.times.Len(); l < r.limit {
  		r.times.PushBack(now)
  		return true, 0
  	}
  	frnt := r.times.Front()
  	if diff := now.Sub(frnt.Value.(time.Time)); diff < r.interval {
  		return false, r.interval - diff
  	}
  	frnt.Value = now
  	r.times.MoveToBack(frnt)
  	return true, 0
  }
docs: // Try returns true if under the rate limit, or false if over and the
  // remaining time before the rate limit expires.