code: func (ss *Rate) GetSingle(key string, nowTs time.Time) (float64, float64) {
  	now := nowTs.UnixNano()
  	var bucket *bucket
  	if bucketno, found := ss.keytobucketno[key]; found {
  		bucket = &ss.buckets[bucketno]
  		rate := ss.recount(bucket.rate, bucket.lastTs, now)
  		errRate := ss.recount(bucket.errRate, bucket.errLastTs, now)
  		return rate - errRate, rate
  	} else {
  		bucketno = uint32(ss.sh.h[0])
  		bucket = &ss.buckets[bucketno]
  		errRate := ss.recount(bucket.rate, bucket.lastTs, now)
  		return 0, errRate
  	}
  
  }
docs: // GetSingle gets the lower and upper bounds of a range for a single element. If the
  // element isn't tracked lower bound will be zero and upper bound will be the
  // lowest bound of all the tracked items.