github.com/webx-top/com@v1.2.12/compare.go (about) 1 /* 2 Copyright 2015 Adrian Stanescu. All rights reserved. 3 Use of this source code is governed by the MIT License (MIT) that can be found in the LICENSE file. 4 5 Go program that compares software versions in the x.y.z format 6 Usage: 7 x := "1" 8 y := "1.0.1" 9 z := "1.0" 10 fmt.Println(VersionCompare(x, y)) // 1 = y 11 fmt.Println(VersionCompare(x, z)) // 0 = equal 12 fmt.Println(VersionCompare(x, a)) // -1 = x 13 */ 14 15 package com 16 17 import ( 18 "log" 19 20 "github.com/hashicorp/go-version" 21 ) 22 23 const ( 24 // VersionCompareGt 左大于右 25 VersionCompareGt = 1 26 // VersionCompareEq 左等于右 27 VersionCompareEq = 0 28 // VersionCompareLt 左小于右 29 VersionCompareLt = -1 30 ) 31 32 func SemVerCompare(a, b string) (int, error) { 33 v1, err := version.NewVersion(a) 34 if err != nil { 35 return 0, err 36 } 37 38 v2, err := version.NewVersion(b) 39 if err != nil { 40 return 0, err 41 } 42 43 return v1.Compare(v2), nil 44 } 45 46 // VersionCompare compare two versions in x.y.z form 47 // @param {string} a version string 48 // @param {string} b version string 49 // @return {int} 1 = a is higher, 0 = equal, -1 = b is higher 50 func VersionCompare(a, b string) (ret int) { 51 var err error 52 ret, err = SemVerCompare(a, b) 53 if err != nil { 54 log.Printf(`failed to VersionCompare(%q, %q): %v`, a, b, err) 55 } 56 return 57 } 58 59 // VersionComparex compare two versions in x.y.z form 60 // @param {string} a version string 61 // @param {string} b version string 62 // @param {string} op <,<=,>,>=,= or lt,le,elt,gt,ge,egt,eq 63 // @return {bool} 64 func VersionComparex(a, b string, op string) bool { 65 switch op { 66 case `<`, `lt`: 67 return VersionCompare(a, b) == VersionCompareLt 68 case `<=`, `le`, `elt`: 69 r := VersionCompare(a, b) 70 return r == VersionCompareLt || r == VersionCompareEq 71 case `>`, `gt`: 72 return VersionCompare(a, b) == VersionCompareGt 73 case `>=`, `ge`, `egt`: 74 r := VersionCompare(a, b) 75 return r == VersionCompareGt || r == VersionCompareEq 76 case `=`, `eq`: 77 return VersionCompare(a, b) == VersionCompareEq 78 default: 79 return false 80 } 81 }