| 123456789101112131415161718192021222324 | package ncutilsimport (	"fmt"	"time")// BackOff - back off any function while there is an errorfunc BackOff(isExponential bool, maxTime int, f interface{}) (interface{}, error) {	// maxTime seconds	startTime := time.Now()	sleepTime := time.Second	for time.Now().Before(startTime.Add(time.Second * time.Duration(maxTime))) {		if result, err := f.(func() (interface{}, error))(); err == nil {			return result, nil		}		time.Sleep(sleepTime)		if isExponential {			sleepTime = sleepTime << 1		}		PrintLog("retrying...", 1)	}	return nil, fmt.Errorf("could not find result")}
 |