• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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))
    }
    

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

    您可能感兴趣的文章:
    • 在Golang代码中如何自动生成版本号的方法示例
    • golang值类型转换成[]uint8类型的操作
    • golang 监听服务的信号,实现平滑启动,linux信号说明详解
    • GO语言ini配置文件的读取的操作
    • go语言中iota和左移右移的使用说明
    上一篇:golang值类型转换成[]uint8类型的操作
    下一篇:golang 对私有函数进行单元测试的实例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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