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 }