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

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项目中的依赖版本问题。

回到顶部