go mod 使用旧版本 版本号指定方式
作者:gs80140
这篇文章主要介绍了go mod 使用旧版本 版本号指定方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
在使用go mod的过程中,发现不容易指定版本号
尤其是没有打tag的,不知道怎么指定版本号, 不知道有哪版本号
正常使用都没有问题,但是当引用的项目用了旧的代码, 这时候必须使用旧的版本,无法指定版本,不知道如何入手
尤其是k8s.io不知道是什么鬼, 从哪里看它的代码,只知道github.com
这个时候在 go.mod文件中 require 里面加上 github.com/kubernetes/cloud-provider 2bf8e45
此时会自动生成版本号, 其中 2bf8e45 这个是在github上找到源码的特定的提交 commit 号, 想使用旧版本的话, 找到对应的tag或分支 找到 commit 号
这个commit号也可以使用tag号来替换
例如
k8s.io/cli-runtime => github.com/kubernetes/cli-runtime kubernetes-1.14.2
然后使用replace来替换,require里面的 github.com/kubernetes/cloud-provider 2bf8e45 会自动变成
github.com/kubernetes/cloud-provider v0.0.0-20190516232619-2bf8e45c8454
此时,我们把它删除并复制到replace 里面
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
效果这样的
原来使用的新版本号不用动,主要换了replace
补充:golang:比较版本号大小
看代码吧~
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)) }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。