package statsd import ( "math/rand" "sync" ) func shouldSample(rate float64, r *rand.Rand, lock *sync.Mutex) bool { if rate >= 1 { return true } // sources created by rand.NewSource() (ie. w.random) are not thread safe. // TODO: use defer once the lowest Go version we support is 1.14 (defer // has an overhead before that). lock.Lock() if r.Float64() > rate { lock.Unlock() return false } lock.Unlock() return true } func copySlice(src []string) []string { if src == nil { return nil } c := make([]string, len(src)) copy(c, src) return c }