Golang Go语言中 build 安装依赖的版本问题。

发布于 1周前 作者 vueper 来自 Go语言

Golang Go语言中 build 安装依赖的版本问题。

我用的是 vgo 来管理依赖,我自己写的一个公共库放在了码云上。 开始几天 go build 的时候,go.mod 生产出来是最新的版本,每次有新版本我就删掉 go.mod 里面那个库,再次 build 会出来最新版本,突然某一天开始,每次 build 就一直是一个旧版本,不会自动更新到最新版本,然后我把代码复制到一台 linux 机器上,新装了 go 环境,也是一样。请问应该如何解决?

6 回复

go mod tidy 了解下。
感觉 go mod 你用的不是很熟呀。 可以看下这篇文章:mlog.club/topic/9

更多关于Golang Go语言中 build 安装依赖的版本问题。的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


试过啦。我试过好多方法,go mod init,tidy,删掉$GOPATH 的缓存或者整个目录(src,pkg,mod),甚至是删仓库,仓库打 tag,删 tag 都不行,还有 go get 库 都不行,找一台新的 linux go build 或者 init,tidy 都不行。唯一可行的办法就是单独 go get 库 或者 go get指定版本 才有用。。。。。。。。。。。。

为什么你要删除 go.mod?

用 go get -u 就能升级到最新的版本

因为正常情况下,删除 go.mod 里的某一个库或者,go.mod 文件,go build 的时候能自动更新到最新的版本的库。我知道 go get -u 也能升级到正常版本,但是我比较习惯,删除 go.mod 里的那个库,然后 go build。 但是这两个方法我都试过,都不行。

你这个“正常情况”很可能只是偶然,被你当作必然了。不是说“最新”才是正常,本来版本选取的原则就是“最小版本”。可能你依赖的其他模块的 go.mod 里已经写了某个版本,那你的模块里的 go.mod 里没有那条,就直接用了依赖的模块的版本,而不是重新获取版本。
go.mod 是不应该删除的,要升级就用 go get -u xxx。这是可以保证以后也能正常工作的,而不是依赖“删除之后就自动更新到最新”这种偶然现象

在Golang中处理依赖版本问题,通常涉及到Go Modules这一核心特性。Go Modules自Go 1.11版本引入,并在后续版本中不断完善,它提供了一种管理依赖关系的标准化方式。

  1. 依赖管理

    • 使用go mod init <module-name>初始化模块。
    • 依赖会自动记录在go.mod文件中,而具体版本和哈希值则记录在go.sum文件中。
  2. 版本控制

    • 你可以在go.mod文件中指定依赖的版本,例如require example.com/module v1.2.3
    • Go Modules支持语义化版本控制(SemVer),可以指定主版本(例如v1),也可以指定具体的小版本(例如v1.2.3)。
  3. 安装依赖

    • 运行go mod tidy来清理未使用的依赖并更新go.modgo.sum文件。
    • 使用go get <package>@<version>来安装或更新特定版本的依赖。
  4. 版本兼容性

    • Go Modules通过最小版本选择(MVS)算法来确保依赖版本之间的兼容性。
    • 如果遇到版本冲突,Go会尝试找到一个满足所有依赖要求的版本组合。
  5. 注意事项

    • 确保你的Go环境已经启用Modules支持(通过设置GO111MODULE=on环境变量或在Go 1.13及以上版本中默认启用)。
    • 定期检查并更新依赖,以利用最新的功能和安全修复。

希望这些信息能帮助你更好地管理Golang项目中的依赖版本问题。

回到顶部