【问题标题】:Where is the module cache in golang?golang中的模块缓存在哪里?
【发布时间】:2019-02-07 03:55:15
【问题描述】:

当我启用 gomodules 并构建我的 go 程序时,会下载所需的包。

但我在$GOPATH/src/$GOPATH/src/mod 中找不到它们。

它们存储在哪里?

export GO111MODULE=on
go mod init
go build main.go 
go: finding github.com/sirupsen/logrus v1.0.6
go: downloading github.com/sirupsen/logrus v1.0.6
...

【问题讨论】:

    标签: go vgo


    【解决方案1】:

    对于 Go 1.11,它们存储在

    $GOPATH/pkg/mod
    

    【讨论】:

    • 请注意,这在go help modules中有记录
    • 在 Linux 上,如果 $GOPATH 为空。模块存储在/home/<user>/go/pkg/mod!
    • @ifnotak 和 macOS 一样。
    • GOPATH 在启用 go 模块时没有意义。有关当前答案,请参阅 stackoverflow.com/a/67233153/224021
    【解决方案2】:

    我在 Macos 10.13.6 上,使用 go1.11 darwin/amd64echo $GOPATH 为空。

    我在$HOME/go/pkg/mod找到了我的模块

    【讨论】:

    • 您是否将 $GOPATH 设置为 $HOME/go?
    • $GOPATH 默认为 $HOME/go on Go 1.11 及更高版本。
    【解决方案3】:

    模块缓存存储在$GOPATH/pkg/mod 中,如果$GOPATH 未设置,则存储在$HOME/go/pkg/mod 中。

    注意:通常,模块缓存是只读的,并且旨在成为不可变缓存。因此,您永远不应该尝试在那里编辑内容,也不应该从缓存中运行go 命令。

    模块缓存包含 zip 文件、解压缩的模块源代码以及 VCS 缓存(不使用代理时)。缓存通常包含单个依赖项的多个版本。

    如果你想在模块缓存中检查依赖的代码,一个捷径是你可以cd直接通过以下方式找到解压依赖的位置:

    cd $(go list -f '{{.Dir}}' -m github.com/foo/bar)
    

    这要求go list 报告模块缓存中模块github.com/foo/bar 的目录位置,默认为您当前在当前模块中使用的任何版本。

    鉴于缓存旨在是不可变的,一个相关的问题是如何编辑依赖项(例如,如果您想添加调试日志,或者可能是准备发送依赖项的上游修复)。此时一个常见的解决方案是使用gohack,它创建依赖项的可变副本(默认情况下在$HOME/gohack,但位置由$GOHACK 变量控制)。 gohack还将您当前的go.mod 文件设置为具有指向该可变副本的replace 指令。

    【讨论】:

      【解决方案4】:

      如果你想清理缓存有一个命令go clean --modcache

      如果您只需要更新一些依赖项,您可能希望从

      中清除有关此依赖项的信息
      • go.mod
      • go.sum
      • 供应商/modules.txt

      【讨论】:

        【解决方案5】:

        要确定缓存位置,可以使用 go env:

        go env|grep CACHE
        

        要清除缓存,请根据要清除的缓存类型使用go clean -modcachego clean -cache

        【讨论】:

          【解决方案6】:

          在终端中运行

          go env GOMODCACHE
          

          go env - 打印所有 Go 环境信息

          go env NAME - 打印特定的环境变量。

          【讨论】:

          • 您应该在回答中加入更多解释。您提供的答案与 Chris 于 2020 年 12 月 30 日发布的答案几乎相同。您的答案应该在现有答案的基础上有所改进。
          • 我认为这个答案对于最新版本的 go 来说是更准确的答案,并且确实比 Chris 的答案有所改进。
          猜你喜欢
          • 2015-09-30
          • 1970-01-01
          • 2015-10-28
          • 2016-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多