zoukankan      html  css  js  c++  java
  • 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()
    }
    
    
  • 相关阅读:
    MonoDevelop/MonoTouch SDK开发iOS程序体验! 不及格的程序员
    iPad 开发陷井1 不及格的程序员
    以苹果平台下开发语言 "ObjectiveC" 谈语言开发效率之争 C#与Java你们都不要争,我才是最慢的! 不及格的程序员
    C# 扩展方法 借签于 ObjectiveC 扩展类. 不及格的程序员
    iOS 编程陷井. 不及格的程序员
    Multimedia Programming Guide & Audio 不及格的程序员
    GoogleStyleGuide 一个不错的开源项目. 不及格的程序员
    撒哟那拉 volatile !!! 不及格的程序员
    iPhone 游戏 Infinity Blade1.0 通关 不及格的程序员
    终于在中国大陆的互联网络中用Facebook and tWitter 's iPhone 客户端登录了。 不及格的程序员
  • 原文地址:https://www.cnblogs.com/egrep/p/12623552.html
Copyright © 2011-2022 走看看