package goutil import ( "errors" "io" "math" "os" "regexp" "time" "github.com/hako/durafmt" ) func FilterToAlnum(input string) string { re := regexp.MustCompile("[^a-zA-Z0-9]+") return re.ReplaceAllString(input, "") } func TimeDiffHuman(first time.Time, second time.Time) string { if first.Before(second) { return durafmt.ParseShort(second.Sub(first)).String() } else { return durafmt.ParseShort(first.Sub(second)).String() } } // Does anyone else use uints for things that are always >=0 like counts and func TimeDiffAbsSeconds(first time.Time, second time.Time) uint { return uint(math.Abs(first.Sub(second).Truncate(time.Second).Seconds())) } func Mkdirp(p string) error { src, err := os.Stat(p) if os.IsNotExist(err) { errDir := os.MkdirAll(p, 0755) if errDir != nil { return err } return nil } if src.Mode().IsRegular() { return errors.New("file already exists at path") } return nil } // straight outta stackoverflow // https://stackoverflow.com/questions/21060945/simple-way-to-copy-a-file-in-golang func CopyFile(src, dst string) (err error) { in, err := os.Open(src) if err != nil { return } defer in.Close() out, err := os.Create(dst) if err != nil { return } defer func() { cerr := out.Close() if err == nil { err = cerr } }() if _, err = io.Copy(out, in); err != nil { return } err = out.Sync() return }