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))
}

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

(0)

相关推荐

  • 在Golang代码中如何自动生成版本号的方法示例

    前言 以前在写C/C++代码时,可以在代码中预定义一些版本宏定义,然后再编译时从外部传入数据作为版本号. golang代码不支持宏定义,如果每次在代码中硬编码版本信息,一来费时费力,二来很容易忘记更新. 如何更优雅的维护golang程序的版本号呢? 翻阅golang文档之后,在go build发现下面的参数 -ldflags 'flag list' arguments to pass on each go tool link invocation. 然后在linker中发现: -X import

  • GO语言ini配置文件的读取的操作

    iniconf 博主前两天在写一个小的go语言项目,想找一个读取ini格式配置和的三方库,在网上找了一圈感觉都不是很好用, 使用起来非常的奇怪,于是自己写了一版,还有两个接口没有实现,在项目中修改或删除配置项后更新到文件中,等待后续有时间了再写,希望用的朋友感觉不错点个赞 github 地址 描述 使用iniconf更简单的读取go的ini配置文件以及根据特定格式的各种配置文件. 安装方法 go get github.com/clod-moon/goconf 使用方法 ini配置文件格式样列 [

  • golang 监听服务的信号,实现平滑启动,linux信号说明详解

    监听服务的信号,实现平滑启动,linux信号说明 package main import ( "context" "fmt" "golang.org/x/sync/errgroup" "net/http" "os" "os/signal" "syscall" ) func main() { g, ctx := errgroup.WithContext(context.

  • golang值类型转换成[]uint8类型的操作

    在go语言中,byte其实是uint8的别名,byte 和 uint8 之间可以直接进行互转. 目前来只能将0~255范围的int转成byte. func Int64ToBytes(num int64) []uint8 { var buffer bytes.Buffer err := binary.Write(&buffer, binary.BigEndian, num) if err != nil { logs.Error("int64转[]uint8失败%v", err)

  • go语言中iota和左移右移的使用说明

    在go语言中iota比较特殊,是一个被编译器修改的常量,在每一个const关键字出现时被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字就会自动加1 左移运算符"<<"是双目运算符 左移n位就是乘以2的n次方. 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0. 右移运算符">>"是双目运算符

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

    在使用go mod的过程中,发现不容易指定版本号 尤其是没有打tag的,不知道怎么指定版本号, 不知道有哪版本号 正常使用都没有问题,但是当引用的项目用了旧的代码, 这时候必须使用旧的版本,无法指定版本,不知道如何入手 尤其是k8s.io不知道是什么鬼, 从哪里看它的代码,只知道github.com 这个时候在 go.mod文件中 require 里面加上 github.com/kubernetes/cloud-provider 2bf8e45 此时会自动生成版本号, 其中 2bf8e45 这个

  • 关于TensorFlow新旧版本函数接口变化详解

    TensorFlow版本更新太快 了,所以导致一些以前接口函数不一致,会报错. 这里总结了一下自己犯的错,以防以后再碰到,也可以给别人参考. 首先我的cifar10的代码都是找到当前最新的tf官网给的,所以后面还有新的tf出来改动了的话,可能又会失效了. 1.python3:(unicode error) 'utf-8' codec can't decode 刚开始执行的时候就报这个错,很郁闷后来发现是因为我用多个编辑器编写, 保存.导致不同编辑器编码解码不一致,会报错.所以唯一的办法全程用 一

  • vue项目查看vue版本及cli版本的实现方式

    查看cli版本,执行如下: vue -V 查看vue版本 npm list vue 补充知识:vue老项目升级vue-cli3.0问题总结 升级步骤 1. 删除原vue-cli并安装vue-cli3.0 2.删除新项目中src下的内容,把原项目中src目录覆盖到新项目中 3.把router从目录文件夹改为文件,src/router/index.js提高一层变成src/router.js 4. 我的项目中src已经分为了views和components所以无需修改,如果不是这个结构需要自己区分下

  • ASP.NET 5升级后如何删除旧版本的DNX

    ASP.NET 5各种升级后旧版本的DNX不会删除,想删除旧版本的DNX,可以通过以下命令完成,在此之前先介绍一下DNX架构及运行原理 DNX是ASP.NET程序运行的核心,其遵循如下两个准则: DNX应该是自包含的,DNX在解析完应用程序依赖树以后才能知道要使用哪个Core CLR包,所以在得到解析树之前,DNX是无法加载任何CLR的,但Roslyn编译器除外. 依赖注入(Dependency Injection,简称DI)贯穿着整个系统栈,DI是DNX的一个核心部分,所有DNX上的类库都构建

  • new_zeros() pytorch版本的转换方式

    如下所示: logprobs.new_zeros(logprobs.size()) pytorch 0.4版本中用到的 新建一个与logprobs类型相同的Variable 转换为pytorch0.2等版本 logprobs.new(logprobs.size()).zero_() 以上这篇new_zeros() pytorch版本的转换方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • tomcat 通过占位符设置端口的方法(即参数指定方式)

    工作需要,找了网上很多资料,都是复制粘贴,并没有解决实际问题,弄了好久终于搞定了. 共有三种方式: 第一种 通过启动命令行启动参数调用 1.在conf/server.xml中进行设置如下:port="${http.port}" 2.在bin/catalina.xml中进行设置如下:JAVA_OPTS="JAVA_OPTS" -Dhttp.port='50000'"(你自己想要设定的端口号) 3.重启tomcat 4.IP+端口访问 表示设置成功 5.最后正

  • 换了最新的idea如何将原来旧版本的idea设置导进新的idea中

    先打开旧的idea,把设置导成jar包 打开新的idea ok! 到此这篇关于换了最新的idea如何将原来旧版本的idea设置导进新的idea中的文章就介绍到这了,更多相关idea设置导进新idea内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

  • vue-cli2.x旧版本卸载不掉的问题踩坑指南(附Vue脚手架安装教程)

    目录 旧版本卸载 问题说明 问题解释 问题解决 总结 旧版本卸载 问题说明 vue2.x脚手架旧版本卸载不掉的问题:(卸载命令运行后输入vue --version仍一直显示旧版本) 问题解释 首先明确一点,卸载不掉肯定说明你的电脑中至少有两个地方存在脚手架,而你的卸载操作只是卸载了其中之一.而出现这个情况的原因,一般来说是你在npm的默认路径下安装过脚手架,在配置了npm全局安装路径之后又安装过脚手架,所以有两个脚手架.(顺带一提,这样的情况提示的都是默认安装路径下的vue脚手架版本) 问题解决

  • maven-compiler-plugin版本指定方式

    目录 maven-compiler-plugin版本指定 1 pom文件添加支持 2 环境jdk/jre指定 3 Java Build 4 pom文件去除支持 maven-compiler-plugin配置JDK版本 仓库地址 使用过的配置 补充说明 maven-compiler-plugin版本指定 spring cloud微服务,生成部署JAR包时提示: maven-compiler-plugin: 3.8.1不能编译,需要jre而不是jdk. 1 pom文件添加支持     <!-- 部署

  • 使用Swagger实现接口版本号管理方式

    目录 Swagger实现接口版本号管理 使用swagger测试接口 Swagger实现接口版本号管理 前言:使用swagger暴露对外接口时原则是每个系统在不同的迭代版本仅仅需要暴露该迭代版本的接口给外部使用,客户端不需要关心不相关的接口 先来看张效果图 下面是实现代码: 定义注解ApiVersion: /** * 接口版本管理注解 * @author 周宁 * @Date 2018-08-30 11:48 */ @Retention(RetentionPolicy.RUNTIME) @Targ

随机推荐