1 Star 0 Fork 0

c./更新类

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
公共方法.go 3.45 KB
一键复制 编辑 原始数据 按行查看 历史
admin 提交于 2024-12-29 03:48 . 2024-12-29
package 更新类
import (
"archive/zip"
"bytes"
数组类 "gitee.com/go_888/goframe/container/garray"
"github.com/blang/semver"
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform"
"io"
"io/ioutil"
"os"
"path/filepath"
)
// 解压zip字节集 函数将一个zip格式的字节集解压到指定的保存路径。
// 此方法与gf的zip.Unzip函数类似,但此方法可以处理GBK编码的中文文件名。
// zip字节集: 待解压的zip格式字节集。
// 保存路径: 解压后文件的保存路径。
// 返回值: 如果解压过程中发生错误,则返回错误。
func X解压zip字节集(zip字节集 []byte, 保存路径 string) error {
zipReader, err := zip.NewReader(bytes.NewReader(zip字节集), int64(len(zip字节集)))
if err != nil {
return err
}
var decodeName string
for _, f := range zipReader.File {
if f.Flags == 0 {
i := bytes.NewReader([]byte(f.Name))
decoder := transform.NewReader(i, simplifiedchinese.GB18030.NewDecoder())
content, _ := ioutil.ReadAll(decoder)
decodeName = string(content)
} else {
decodeName = f.Name
}
fpath := filepath.Join(保存路径, decodeName)
if f.FileInfo().IsDir() {
os.MkdirAll(fpath, os.ModePerm)
} else {
if err = os.MkdirAll(filepath.Dir(fpath), os.ModePerm); err != nil {
return err
}
inFile, err := f.Open()
if err != nil {
return err
}
defer inFile.Close()
outFile, err := os.OpenFile(fpath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
if err != nil {
return err
}
defer outFile.Close()
_, err = io.Copy(outFile, inFile)
if err != nil {
return err
}
}
}
return nil
}
// X取最新版本号 接收一个版本号数组,返回数组内的最新版本号字符串。
// 使用 semver 库来处理版本号,以确保版本号的有效性和正确排序。
// 参数:
// 版本号数组 []string: 一个包含版本号的字符串数组。
// 返回值:
// string: 数组内的最新版本号字符串,如果没有有效版本号,则返回空字符串。
func X取最新版本号(版本号数组 []string) string {
// "github.com/blang/semver"
// 这个库的好处是,使用了值而不是值引用,如果版本号不合格,会直接设置成"0.0.0", 避免panic
var semVerList []semver.Version
for _, v := range 版本号数组 {
version, _ := semver.Make(v)
semVerList = append(semVerList, version)
}
semver.Sort(semVerList) // 排序
// 最新
if len(semVerList) > 0 {
return semVerList[len(semVerList)-1].String()
}
return ""
}
// X版本号排序 接受一个版本号字符串数组,并返回按语义化版本号排序后的数组。
// 该函数使用 github.com/blang/semver 库进行版本号的解析和排序。
// 参数:
// 版本号数组 []string: 一个包含版本号字符串的数组。
// 返回值:
// []string: 按语义化版本号排序后的版本号字符串数组。
func X版本号排序(版本号数组 []string) []string {
// "github.com/blang/semver"
// 这个库的好处是,使用了值而不是值引用,如果版本号不合格,会直接设置成"0.0.0", 避免panic
var semVerList []semver.Version
for _, v := range 版本号数组 {
version, _ := semver.Make(v)
semVerList = append(semVerList, version)
}
semver.Sort(semVerList) // 排序
// 整理返回数组
返回版本号数组 := 数组类.X创建文本()
for _, v := range semVerList {
返回版本号数组.X加入前面(v.String())
}
return 返回版本号数组.X取数组()
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/go_888/update.git
git@gitee.com:go_888/update.git
go_888
update
更新类
master

搜索帮助