golang实现版本号比较
宁静_夏天 2018-06-29 09:34:21 浏览19 评论0摘要: 纯粹写着玩的,好久没更新博客了。 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, ". ")
}
用云栖社区APP,舒服~
【云栖快讯】云栖社区技术交流群汇总,阿里巴巴技术专家及云栖社区专家等你加入互动,老铁,了解一下? 详情请点击 评论 (0) 点赞 (0) 收藏 (0)相关文章
- golang实现PHP的version_compare函…
- Go语言在扫码支付系统中的成功实践
- golang之pkg(包)
- 记一次从Rails至Golang的接口迁移
- goalng 发布的版本中自动加上 git revisi…
- 干货 | 蚂蚁金服是如何实现经典服务化架构往 Servi…
- golang gc 问题(转的)
- 百亿互金平台技术栈大起底
- golang调试工具Delve
- Mac下Go安装配置并使用Protobuf