golang实现版本号比较-阿里云开发者社区

开发者社区> 宁静_夏天> 正文

golang实现版本号比较

简介: 纯粹写着玩的,好久没更新博客了。 import ( "fmt" "strings" "testing" "time" ) /** *Created by 908204694@qq.
+关注继续查看

写一下,好久没更新博客了。

import (
    "fmt"
    "strings"
    "testing"
    "time"
)

/**
*Created by 908204694@qq.com 
*/

//版本号大
const VersionBig = 1

//版本号小
const VersionSmall = 2

//版本号相等
const VersionEqual = 0

func Test_version(t *testing.T) {

    versionA := "1.2.3a"
    versionB := "1.2.3b"
    fmt.Println(compareStrVer(versionA, versionB))

    time.LoadLocation("Local")
    fmt.Println(time.Now())
}

func compareStrVer(verA, verB string) int {

    verStrArrA := spliteStrByNet(verA)
    verStrArrB := spliteStrByNet(verB)

    lenStrA := len(verStrArrA)
    lenStrB := len(verStrArrB)

    if lenStrA != lenStrB {
        panic("版本号格式不一致")

    }

    return compareArrStrVers(verStrArrA, verStrArrB)
}

// 比较版本号字符串数组
func compareArrStrVers(verA, verB []string) int {

    for index, _ := range verA {

        littleResult := compareLittleVer(verA[index], verB[index])

        if littleResult != VersionEqual {
            return littleResult
        }
    }

    return VersionEqual
}

//
// 比较小版本号字符串
//
func compareLittleVer(verA, verB string) int {

    bytesA := []byte(verA)
    bytesB := []byte(verB)

    lenA := len(bytesA)
    lenB := len(bytesB)
    if lenA > lenB {
        return VersionBig
    }

    if lenA < lenB {
        return VersionSmall
    }

    //如果长度相等则按byte位进行比较

    return compareByBytes(bytesA, bytesB)
}

// 按byte位进行比较小版本号
func compareByBytes(verA, verB []byte) int {

    for index, _ := range verA {
        if verA[index] > verB[index] {
            return VersionBig
        }
        if verA[index] < verB[index] {
            return VersionSmall
        }

    }

    return VersionEqual
}

// 按“.”分割版本号为小版本号的字符串数组
func spliteStrByNet(strV string) []string {

    return strings.Split(strV, ".")
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
7819 0
阿里云POLARDB新版本:首个兼容Oracle的云原生数据库
3月21日,阿里云发布POLARDB v2.0,该版本是业内首个兼容 Oracle的云原生数据库,可帮助金融、医疗、制造等大型企业在数小时内完成业务迁移,10TB数据备份只需10分钟。
4398 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
10192 0
PolarDB-X 1.0-API参考-1.0(2019版本)-请求结构
本文主要介绍PolarDB-X 1.0 API的请求结构,包括服务地址、请求协议和请求方法等。
11 0
PolarDB-X 1.0-API参考-1.0(2017版本)-OpenAPI使用-公共参数
公共参数包括两个部分:公共请求参数与公共返回参数。 公共请求参数:每个接口都需要使用的请求参数。 公共返回参数:任何的接口调用,无论成功与否,系统都会返回的参数。
7 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
9549 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
11201 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11346 0
PolarDB-X 1.0-API参考-1.0(2017版本)-OpenAPI使用-OpenAPI概览
实例管理类 API 实例管理类 API 可实现对 PolarDB-X 实例的生命周期管理,主要包括创建实例、查询实例、释放实例等操作,如下表所示。
16 0
+关注
宁静_夏天
喜欢编程,java,php,js,golang等,目前主要是golang后端方向.
348
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载