golang版本实现版本号比较-从易到解决bug
bug版本
简易版的版本号对比,要求必须版本号位数相同,否则对比不了,这里也是存在一个bug,后续解决
1.1.1 --> 1.2.1 ok
1.1.1 --> 1.2.12 ok
1.1.1 --> 1.2 not ok
package main
import (
"fmt"
"strings"
)
var (
version0 = 0
version1 = 1
version2 = 2
)
func StrTrimSpace(v1str,v2str string )(v1,v2 string ){
v1=strings.TrimSpace(v1str)
v2=strings.TrimSpace(v2str)
return
}
func comparSlice(v1slice,v2slice []string )int{
for index,_ :=range v1slice{
if v1slice[index] > v2slice[index]{
return version1
}
if v1slice[index] < v2slice[index]{
return version2
}
if len(v1slice)-1 == index {
return version0
}
}
return version0
}
func compareStrVer(v1,v2 string)int{
s1, s2 := StrTrimSpace(v1, v2)
v1slice := strings.Split(s1,".")
v2slice := strings.Split(s2,".")
//长度不相等直接退出
if len(v1slice) != len(v2slice){
errorf := fmt.Errorf("v1 v2 len not equew")
panic(errorf)
}
res := comparSlice(v1slice, v2slice)
return res
}
/*
简易版的版本号对比,要求必须版本号位数相同,否则对比不了,这里也是存在一个bug,后续解决
1.1.1 --> 1.2.1 ok
1.1.1 --> 1.2.12 ok
1.1.1 --> 1.2 not ok
*/
func demo01(){
v1:="2.1.31"
v2:="3.1.1"
fmt.Println(compareStrVer(v1,v2))
}
func main() {
demo01()
}
完整解决版本
package main
import (
"fmt"
"strings"
)
var (
version0 = 0
version1 = 1
version2 = 2
)
func StrTrimSpace(v1str,v2str string )(v1,v2 string ){
v1=strings.TrimSpace(v1str)
v2=strings.TrimSpace(v2str)
return
}
func comparSlice(v1slice,v2slice []string )int{
for index,_ :=range v1slice{
if v1slice[index] > v2slice[index]{
return version1
}
if v1slice[index] < v2slice[index]{
return version2
}
if len(v1slice)-1 == index {
return version0
}
}
return version0
}
func comparSlice1(v1slice,v2slice []string,flas int )int{
for index,_ :=range v1slice{
//按照正常逻辑v1slice 长度小
if v1slice[index] > v2slice[index]{
if flas == 2{
return version2
}
return version1
}
if v1slice[index] < v2slice[index]{
if flas == 2{
return version1
}
return version2
}
if len(v1slice)-1 == index {
if flas == 2{
return version1
}else if flas == 1{
return version2
}
}
}
return version0
}
func compareStrVer(v1,v2 string)(res int ){
s1, s2 := StrTrimSpace(v1, v2)
v1slice := strings.Split(s1,".")
v2slice := strings.Split(s2,".")
//长度不相等直接退出
if len(v1slice) != len(v2slice){
if len(v1slice) > len(v2slice){
res=comparSlice1(v2slice,v1slice,2)
return res
}else{
res=comparSlice1(v1slice,v2slice,1)
return res
}
}else{
res = comparSlice(v1slice, v2slice)
}
return res
}
/*
简易版的版本号对比,要求必须版本号位数相同,否则对比不了,这里也是存在一个bug,这个版本已经解决
1.1.1 --> 1.2.1 ok
1.1.1 --> 1.2.12 ok
1.1.1 --> 1.2 ok
1.2 --> 3.2.2 ok
*/
func demo01(){
v1:="5.4.0.0"
v2:="5.4.0.0"
fmt.Println(compareStrVer(v1,v2))
}
func main() {
demo01()
}