func (tb *tokenBucket) wait() {
	// If earliest unspent token is in the future, sleep until then
	time.Sleep(time.Until(tb.earliestUnspentToken))

	// Alternatively, enforce bucket capacity if necessary
	capacityToken := tb.capacityToken()
	if tb.earliestUnspentToken.Before(capacityToken) {
		tb.earliestUnspentToken = capacityToken
	}

	// 'Remove' a token from the bucket
	tb.earliestUnspentToken = tb.earliestUnspentToken.Add(tb.tokenInterval)
}
func (tb *tokenBucket) wait() {
	
	time.Sleep(time.Until(tb.earliestUnspentToken))

	
	capacityToken := tb.capacityToken()
	if tb.earliestUnspentToken.Before(capacityToken) {
		tb.earliestUnspentToken = capacityToken
	}

	
	tb.earliestUnspentToken = tb.earliestUnspentToken.Add(tb.tokenInterval)
}
func ( tb * tokenBucket ) wait ( ) { // If earliest unspent token is in the future, sleep until then time . Sleep ( time . Until ( tb . earliestUnspentToken ) ) // Alternatively, enforce bucket capacity if necessary capacityToken := tb . capacityToken ( ) if tb . earliestUnspentToken . Before ( capacityToken ) { tb . earliestUnspentToken = capacityToken } // 'Remove' a token from the bucket tb . earliestUnspentToken = tb . earliestUnspentToken . Add ( tb . tokenInterval ) }
// Blocks until there is a token available.
// Not safe for concurrent use by multiple goroutines.
Blocks until there is a token available . Not safe for concurrent use by multiple goroutines .