V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
304464743
V2EX  ›  Go 编程语言

go build 安装依赖的版本问题。

  •  
  •   304464743 · 2019-06-25 14:17:31 +08:00 · 3799 次点击
    这是一个创建于 1963 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    5 条回复    2019-07-02 14:18:39 +08:00
    fuckshit
        1
    fuckshit  
       2019-06-25 18:36:25 +08:00
    `go mod tidy` 了解下。
    感觉 go mod 你用的不是很熟呀。 可以看下这篇文章:mlog.club/topic/9
    304464743
        2
    304464743  
    OP
       2019-06-28 14:33:03 +08:00
    @fuckshit 试过啦。我试过好多方法,go mod init,tidy,删掉$GOPATH 的缓存或者整个目录(src,pkg,mod),甚至是删仓库,仓库打 tag,删 tag 都不行,还有 go get 库 @latest 都不行,找一台新的 linux go build 或者 init,tidy 都不行。唯一可行的办法就是单独 go get 库 @master 或者 go get@指定版本 才有用。。。。。。。。。。。。
    reus
        3
    reus  
       2019-07-01 17:13:48 +08:00
    为什么你要删除 go.mod?

    用 go get -u 就能升级到最新的版本
    304464743
        4
    304464743  
    OP
       2019-07-02 10:01:34 +08:00
    @reus 因为正常情况下,删除 go.mod 里的某一个库或者,go.mod 文件,go build 的时候能自动更新到最新的版本的库。我知道 go get -u 也能升级到正常版本,但是我比较习惯,删除 go.mod 里的那个库,然后 go build。 但是这两个方法我都试过,都不行。
    reus
        5
    reus  
       2019-07-02 14:18:39 +08:00
    @304464743 你这个“正常情况”很可能只是偶然,被你当作必然了。不是说“最新”才是正常,本来版本选取的原则就是“最小版本”。可能你依赖的其他模块的 go.mod 里已经写了某个版本,那你的模块里的 go.mod 里没有那条,就直接用了依赖的模块的版本,而不是重新获取版本。
    go.mod 是不应该删除的,要升级就用 go get -u xxx。这是可以保证以后也能正常工作的,而不是依赖“删除之后就自动更新到最新”这种偶然现象
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2826 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:36 · PVG 21:36 · LAX 05:36 · JFK 08:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.