package mathx import ( "math/rand" "sync" "time" ) type Probe struct { r *rand.Rand lock sync.Mutex } func NewProbe() *Probe { return &Probe{ r: rand.New(rand.NewSource(time.Now().UnixNano())), } } func (p *Probe) TrueOnProbe(probe float64) bool { p.lock.Lock() truth := p.r.Float64() < probe p.lock.Unlock() return truth }