• 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()
    }
    
    
  • 相关阅读:
    『NiFi 节点本地流与集群流不一致导致集群加入失败』问题解决
    『NiFi 学习之路』简介
    『NiFi 学习之路』自定义 —— 组件的自定义及使用
    『NiFi 学习之路』使用 —— 主要组件的使用
    『NiFi 学习之路』把握 —— 架构及主要部件
    TabLayout与ViewPager同步后Tab的标题不显示
    Word 为标题设置段前段后间距设置与异常
    Word 中将正文中的参考文件标号链接到参考文献具体条目
    Linux字体美化实战(Fontconfig配置)(转)
    Linux字体美化实战(Fontconfig配置)(转)
  • 原文地址:https://www.cnblogs.com/egrep/p/12623552.html
Copyright © 2020-2023  润新知