func (ch *ConsistentHash) String() string {
	ch.mu.RLock()
	defer ch.mu.RUnlock()

	var output []string
	for _, bucket := range ch.hashring {
		output = append(output, fmt.Sprintf("%d:%s-%02d", bucket.Hashcode, bucket.Bucket, bucket.Replica))
	}
	return strings.Join(output, ", ")
}
// String returns a string form of the hash for debugging purposes.
//
// Calling `String` is safe to do concurrently and acquires
// a read lock on the consistent hash reference.
String returns a string form of the hash for debugging purposes.

Calling `String` is safe to do concurrently and acquires
a read lock on the consistent hash reference.
// String returns a string form of the hash for debugging purposes . // // Calling ` String ` is safe to do concurrently and acquires // a read lock on the consistent hash reference .
func (ch *ConsistentHash) String() string {
	ch.mu.RLock()
	defer ch.mu.RUnlock()
	var output []string
	for _, bucket := range ch.hashring {
		output = append(output, fmt.Sprintf("%d:%s-%02d", bucket.Hashcode, bucket.Bucket, bucket.Replica))
	}
	return strings.Join(output, ", ")
}
func ( ch * ConsistentHash ) String ( ) string { ch . mu . RLock ( ) defer ch . mu . RUnlock ( ) var output [ ] string for _ , bucket := range ch . hashring { output = append ( output , fmt . Sprintf ( " " , bucket . Hashcode , bucket . Bucket , bucket . Replica ) ) } return strings . Join ( output , " " ) }
String returns a string form of the hash for debugging purposes.
String returns a string form of the hash for debugging purposes .