使用 go.mod 部署到 google app engine flexible 失败,因为它正在 GOPATH 中寻找依赖库

Roh*_*ith 5 go app-engine-flexible go-modules

我有来自这里的 helloworld 应用程序,并进行了一些修改。

  1. 我使用过 logrus(引入对外部库的依赖)
  2. 我使用 go mod init 添加了一个 go.mod
  3. 我已在 GOPATH 之外签出此代码。

一切都在本地主机上运行。我可以在 localhost:8080 上看到 hello 消息。当我尝试执行 gcloud 应用程序部署时,出现以下错误:

staging for go1.11
Staging Flex app: failed analyzing /home/.../code/app-engine-gomod: cannot find package "github.com/sirupsen/logrus" in any of:
    ($GOROOT not set)
    /home/.../go/src/github.com/sirupsen/logrus (from $GOPATH)
GOPATH: /home/.../go
Run Code Online (Sandbox Code Playgroud)

我试过和没有go mod vendor都无济于事。我究竟做错了什么?

shr*_*umm 2

我有一个解决方法给你 - 它并不漂亮。我不知道为什么应用程序引擎不尝试解决 go 模块的依赖关系,而是只在 $GOPATH 中查找。

我的解决方法是将 go 模块缓存中的相应文件夹复制回 Go 路径。我很想知道是否有人有更好的解决方案。

你的模组缓存应该位于$GOPATH/pkg/mod

将您需要的依赖项复制到您的$GOPATH/src文件夹中,然后就可以开始了。

相关问题,希望这对某人有帮助。这让我陷入了困境,因为我最近切换到了 Go 模块,而 GAE 抱怨依赖项中存在一个错误,该错误已在新版本中修复。我多次更新了依赖项,它在本地测试中运行良好,但我在app deploy. 最终我意识到发生了什么:在本地运行代码时,Go 正确地从 go 模块缓存组装了依赖项 - 应用程序引擎从 Go 路径的“旧”位置获取它。一旦启用 Go 模块,go get只会更新 mod 缓存。