code: func (s *Schedule) Next(now, prev time.Time) time.Time {
  	if s.triggered {
  		return DistantFuture
  	}
  
  	// For an absolute schedule just look at the time table.
  	if s.cronExpr != nil {
  		return s.cronExpr.Next(now)
  	}
  
  	// Using relative schedule and this is a first invocation ever? Randomize
  	// start time, so that a bunch of newly registered cron jobs do not start all
  	// at once. Otherwise just wait for 'interval' seconds after previous
  	// invocation.
  	if prev.IsZero() {
  		// Pass seed through math/rand to make small seeds (used by unit tests),
  		// less special.
  		rnd := rand.New(rand.NewSource(int64(s.randSeed))).Float64()
  		return now.Add(time.Duration(float64(s.interval) * rnd))
  	}
  	next := prev.Add(s.interval)
  	if next.Sub(now) < 0 {
  		next = now
  	}
  	return next
  }
docs: // Next tells when to run the job the next time.
  //
  // 'now' is current time. 'prev' is when previous invocation has finished (or
  // zero time for first invocation).