go mod 使用旧版本 版本号指定方式

时间:2022-06-01 22:10:48

在使用go mod的过程中,发现不容易指定版本号

尤其是没有打tag的,不知道怎么指定版本号, 不知道有哪版本号

正常使用都没有问题,但是当引用的项目用了旧的代码, 这时候必须使用旧的版本,无法指定版本,不知道如何入手

尤其是k8s.io不知道是什么鬼, 从哪里看它的代码,只知道github.com

这个时候在 go.mod文件中 require 里面加上 github.com/kubernetes/cloud-provider 2bf8e45

此时会自动生成版本号, 其中 2bf8e45 这个是在github上找到源码的特定的提交 commit 号, 想使用旧版本的话, 找到对应的tag或分支 找到 commit 号

这个commit号也可以使用tag号来替换

例如

?
1
k8s.io/cli-runtime => github.com/kubernetes/cli-runtime kubernetes-1.14.2

go mod 使用旧版本 版本号指定方式

然后使用replace来替换,require里面的 github.com/kubernetes/cloud-provider 2bf8e45 会自动变成

?
1
github.com/kubernetes/cloud-provider v0.0.0-20190516232619-2bf8e45c8454

此时,我们把它删除并复制到replace 里面

?
1
2
3
k8s.io/apiserver => github.com/kubernetes/apiserver v0.0.0-20190516230822-f89599b3f645
k8s.io/cloud-provider => github.com/kubernetes/cloud-provider v0.0.0-20190516232619-2bf8e45c8454
sigs.k8s.io/yaml => github.com/kubernetes-sigs/yaml v1.1.0

效果这样的

go mod 使用旧版本 版本号指定方式

原来使用的新版本号不用动,主要换了replace

go mod 使用旧版本 版本号指定方式

补充:golang:比较版本号大小

看代码吧~

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package main
import (
    "fmt"
    "strings"
)
var (
    VersionBig = 1
    VersionSmall = 2
    VersionEqual = 0
)
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
    }
    return compareByBytes(bytesA, bytesB)
}
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, ".")
}
func main() {
    versionA := "1.2.3.54"
    versionB := "1.2.3.54"
    fmt.Println(compareStrVer(versionA, versionB))
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。

原文链接:https://blog.csdn.net/gs80140/article/details/95320215