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, ".")
}
相关文章
|
Go 开发者
go-carbon 2.2.9 版本发布, 轻量级、语义化、对开发者友好的 Golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库,支持链式调用。
57 0
|
Go 开发者
go-carbon 2.2.7 版本发布, 轻量级、语义化、对开发者友好的Golang时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库,支持链式调用。
69 0
|
Go 开发者
go-carbon 2.2.6 版本发布, 轻量级、语义化、对开发者友好的Golang时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库,支持链式调用。 目前已被 [awesome-go](https://github.com/avelino/awesome-go#date-and-time "awesome-go") 收录,如果您觉得不错,请给个 star 吧
60 0
|
Linux 编译器 Go
Golang 语言怎么安装多个 Golang 版本的环境?
Golang 语言怎么安装多个 Golang 版本的环境?
230 0
|
6月前
|
Java Go Rust
Golang每日一练(leetDay0095) 第一个错误的版本、完全平方数
Golang每日一练(leetDay0095) 第一个错误的版本、完全平方数
44 0
Golang每日一练(leetDay0095) 第一个错误的版本、完全平方数
|
6月前
|
Java Go
浅谈Golang 不同版本的defer
浅谈Golang 不同版本的defer
55 1
|
6月前
|
Go
golang力扣leetcode 278.第一个错误的版本
golang力扣leetcode 278.第一个错误的版本
33 0
|
测试技术 Go 开发者
go-carbon 2.2.12 版本发布, 轻量级、语义化、对开发者友好的 Golang 时间处理库
carbon 是一个轻量级、语义化、零依赖、对开发者友好的 golang 时间处理库,支持链式调用。
53 1
|
6月前
|
开发框架 NoSQL Go
GoFrame v2.5 版本发布,企业级 Golang 开发框架
GoFrame v2.5 版本发布,企业级 Golang 开发框架
119 0
|
Go 开发者
go-carbon 2.2.8 版本发布, 轻量级、语义化、对开发者友好的 Golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库,支持链式调用。
70 0