go mod 使用舊版本 版本號指定方式
在使用go mod的過程中,發(fā)現(xiàn)不容易指定版本號
尤其是沒有打tag的,不知道怎么指定版本號, 不知道有哪版本號
正常使用都沒有問題,但是當(dāng)引用的項(xiàng)目用了舊的代碼, 這時候必須使用舊的版本,無法指定版本,不知道如何入手
尤其是k8s.io不知道是什么鬼, 從哪里看它的代碼,只知道github.com
這個時候在 go.mod文件中 require 里面加上 github.com/kubernetes/cloud-provider 2bf8e45
此時會自動生成版本號, 其中 2bf8e45 這個是在github上找到源碼的特定的提交 commit 號, 想使用舊版本的話, 找到對應(yīng)的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
此時,我們把它刪除并復(fù)制到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

補(bǔ)充: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))
}
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Go?interface{}?轉(zhuǎn)切片類型的實(shí)現(xiàn)方法
本文主要介紹了Go?interface{}?轉(zhuǎn)切片類型的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
一文帶你了解Go語言fmt標(biāo)準(zhǔn)庫輸出函數(shù)的使用
這篇文章主要為大家詳細(xì)介紹了Go語言中 fmt 標(biāo)準(zhǔn)庫輸出函數(shù)的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12
golang 實(shí)現(xiàn)兩個結(jié)構(gòu)體復(fù)制字段
這篇文章主要介紹了golang 實(shí)現(xiàn)兩個結(jié)構(gòu)體復(fù)制字段,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
golang 40行代碼實(shí)現(xiàn)通用協(xié)程池
golang協(xié)程機(jī)制很方便的解決了并發(fā)編程的問題,但是協(xié)程并不是沒有開銷的,所以也需要適當(dāng)限制一下數(shù)量。這篇文章主要介紹了golang 40行代碼實(shí)現(xiàn)通用協(xié)程池,需要的朋友可以參考下2018-08-08
golang調(diào)用shell命令(實(shí)時輸出,終止)
本文主要介紹了golang調(diào)用shell命令(實(shí)時輸出,終止),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
使用Golang實(shí)現(xiàn)WebSocket心跳機(jī)制
WebSocket是一種在客戶端和服務(wù)器之間實(shí)現(xiàn)全雙工通信的協(xié)議,它允許實(shí)時地傳輸數(shù)據(jù),并且比傳統(tǒng)的HTTP請求更加高效,在使用Golang構(gòu)建WebSocket應(yīng)用程序時,一個重要的考慮因素是如何實(shí)現(xiàn)心跳機(jī)制,所以本文將探討如何使用Golang實(shí)現(xiàn)WebSocket心跳2023-11-11

