code: func kRandomMembers(k int, members []Member, filterFunc func(Member) bool) []Member {
  	n := len(members)
  	kMembers := make([]Member, 0, k)
  OUTER:
  	// Probe up to 3*n times, with large n this is not necessary
  	// since k << n, but with small n we want search to be
  	// exhaustive
  	for i := 0; i < 3*n && len(kMembers) < k; i++ {
  		// Get random member
  		idx := rand.Intn(n)
  		member := members[idx]
  
  		// Give the filter a shot at it.
  		if filterFunc != nil && filterFunc(member) {
  			continue OUTER
  		}
  
  		// Check if we have this member already
  		for j := 0; j < len(kMembers); j++ {
  			if member.Name == kMembers[j].Name {
  				continue OUTER
  			}
  		}
  
  		// Append the member
  		kMembers = append(kMembers, member)
  	}
  
  	return kMembers
  }
docs: // kRandomMembers selects up to k members from a given list, optionally
  // filtering by the given filterFunc