package common import ( "bytes" "encoding/json" "io" "os" "path/filepath" "strings" "github.com/sirupsen/logrus" "github.com/spf13/cast" ) func FormatJson(data string) (string, error) { var out bytes.Buffer err := json.Indent(&out, []byte(data), "", " ") return out.String(), err } func SubStr(str string, start int, length int) (result string) { s := []rune(str) total := len(s) if total == 0 { return } // 允许从尾部开始计算 if start < 0 { start = total + start if start < 0 { return } } if start > total { return } // 到末尾 if length < 0 { length = total } end := start + length if end > total { result = string(s[start:]) } else { result = string(s[start:end]) } return } // 是否升级 func IsUpgrade(newVersion, oldVersion string) bool { nvArr := strings.SplitN(newVersion, ".", 3) if len(nvArr) != 3 { logrus.Error("new version format err") return false } ovArr := strings.SplitN(oldVersion, ".", 3) if len(ovArr) != 3 { logrus.Error("old version format err") return false } nvNum := cast.ToInt(nvArr[0])*100 + cast.ToInt(nvArr[1])*10 + cast.ToInt(nvArr[2]) ovNum := cast.ToInt(ovArr[0])*100 + cast.ToInt(ovArr[1])*10 + cast.ToInt(ovArr[2]) if nvNum > ovNum { return true } return false } func Copy(src, dst string) (len int64, err error) { dstWriter, err := os.Create(dst) if err != nil { logrus.Error(err) return } srcReader, err := os.Open(src) if err != nil { logrus.Error(err) return } // Copy()函数其实是调用了 // io包中私有函数copyBuffer() 默认缓冲区是32K // 与Copy()函数功能一致的是CopyBuffer()可以设置缓冲区 len, err = io.Copy(dstWriter, srcReader) if err != nil { logrus.Error(err) return } return } func DeleteFile(filePath string) error { return os.Remove(filePath) } func RemoveContents(dir string) error { d, err := os.Open(dir) if err != nil { return err } defer d.Close() names, err := d.Readdirnames(-1) if err != nil { return err } for _, name := range names { err = os.RemoveAll(filepath.Join(dir, name)) if err != nil { return err } } return nil }