初始化
This commit is contained in:
+76
@@ -0,0 +1,76 @@
|
|||||||
|
package versionx
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 定义一个结构体,表示版本号
|
||||||
|
type Version struct {
|
||||||
|
Major int // 主版本号
|
||||||
|
Minor int // 次版本号
|
||||||
|
Patch int // 补丁版本号
|
||||||
|
}
|
||||||
|
|
||||||
|
// 定义一个方法,比较两个版本号的大小
|
||||||
|
// 返回值为 -1, 0, 1 分别表示 v 小于, 等于, 大于 other
|
||||||
|
func (v Version) Compare(other Version) int {
|
||||||
|
if v.Major < other.Major {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
if v.Major > other.Major {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
// 如果主版本号相同,比较次版本号
|
||||||
|
if v.Minor < other.Minor {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
if v.Minor > other.Minor {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
// 如果次版本号相同,比较补丁版本号
|
||||||
|
if v.Patch < other.Patch {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
if v.Patch > other.Patch {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
// 如果补丁版本号也相同,说明两个版本号相等
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// 定义一个函数,将字符串形式的版本号转换为 Version 结构体
|
||||||
|
// 假设字符串形式的版本号符合 x.y.z 的格式,其中 x, y, z 为非负整数
|
||||||
|
// 如果转换失败,返回一个错误
|
||||||
|
func ParseVersion(s string) (*Version, error) {
|
||||||
|
s = strings.TrimSpace(s)
|
||||||
|
s = strings.TrimPrefix(s, "v")
|
||||||
|
s = strings.TrimPrefix(s, "V")
|
||||||
|
|
||||||
|
// 使用 . 作为分隔符,将字符串分割为三部分
|
||||||
|
parts := strings.Split(s, ".")
|
||||||
|
// 如果分割后的部分不是三个,说明格式不正确,返回一个错误
|
||||||
|
if len(parts) != 3 {
|
||||||
|
return nil, errors.New("invalid version format")
|
||||||
|
}
|
||||||
|
// 定义一个空的 Version 结构体
|
||||||
|
var v Version
|
||||||
|
// 使用 strconv.Atoi 函数,将字符串转换为整数
|
||||||
|
// 如果转换失败,返回一个错误
|
||||||
|
var err error
|
||||||
|
v.Major, err = strconv.Atoi(parts[0])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
v.Minor, err = strconv.Atoi(parts[1])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
v.Patch, err = strconv.Atoi(parts[2])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
// 返回转换后的 Version 结构体
|
||||||
|
return &v, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package versionx_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"code.yun.ink/pkg/versionx"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 定义一个测试函数,用于演示如何使用上面定义的函数和方法
|
||||||
|
func TestVersionCompare(t *testing.T) {
|
||||||
|
// 定义两个字符串形式的版本号
|
||||||
|
v1 := "v1.2.3"
|
||||||
|
v2 := "V1.3.0"
|
||||||
|
// 将字符串形式的版本号转换为 Version 结构体
|
||||||
|
// 如果转换失败,打印错误并退出
|
||||||
|
ver1, err := versionx.ParseVersion(v1)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ver2, err := versionx.ParseVersion(v2)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 使用 Compare 方法,比较两个版本号的大小
|
||||||
|
// 根据返回值,打印相应的结果
|
||||||
|
switch ver1.Compare(*ver2) {
|
||||||
|
case -1:
|
||||||
|
fmt.Printf("%s < %s\n", v1, v2)
|
||||||
|
case 0:
|
||||||
|
fmt.Printf("%s = %s\n", v1, v2)
|
||||||
|
case 1:
|
||||||
|
fmt.Printf("%s > %s\n", v1, v2)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user