go_dreamfactory/cmd/v2/lib/common/utils.go
2022-09-23 12:09:19 +08:00

120 lines
2.1 KiB
Go

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
}