【问题标题】:Golang Cloud Function failed deployment missing dot in first path elementGolang Cloud Function 部署失败,第一个路径元素中缺少点
【发布时间】:2020-05-18 02:43:05
【问题描述】:

我尝试使用 module = mymodule 部署 Golang 项目,但失败并出现以下错误

Deployment failure:
Build failed: {"error":{"buildpackId":"google.go.functions-framework","buildpackVersion":"0.9.0","errorType":13,"canonicalCode":13,"errorId":"131fbb9d"
,"errorMessage":"go mod: -require=mymodule@v0.0.0: invalid path: malformed module path \"mymodule\":
missing dot in first path element"},"stats":null}

如果我将 mymodule 重命名为在其中包含点,例如mymodule.test ,然后它在我的本地失败,因为它试图从不存在的 https://mymodule.test 外部获取它

提前致谢

【问题讨论】:

  • 您能否提供可重现的步骤,以便我可以从我这里进行测试?

标签: go google-cloud-functions go-modules


【解决方案1】:

你可以在你的 go.mod 文件中定义一个本地模块,像这样

require mymodule.test v0.0.0

replace mymodule.test v0.0.0=> ./path/to/mymodule

【讨论】:

  • 非常感谢您的建议。我尝试使用 replace 出于某种原因它尝试从 GOROOT 文件夹而不是 project root 文件夹中获取,因此返回另一个错误 cmd\main.go:13:2: package //mymodule.test/graph/resolvers is not in GOROOT (c:\go\src\mymodule.test\graph\resolvers)
  • 你能分享一下你的项目结构吗?
  • replace mymodule.test => ./放在go.mod的最后一行,并修改所有其他地方使用mymodule.test后,我就可以在GCP中部署了,非常感谢
【解决方案2】:

Go 模块名称将被解释为给定项目可用的 URL。您必须通过项目的 URL 来命名您的模块。例如。 github.com/iwan/yourproject,假设你的项目在github.com/iwan/yourproject下。

原因

当您发布您的 go 模块并将其构建到 gcloud 中时,您的模块将被导入(请参阅错误消息:go mod: -require=mymodule@v0.0.0)。标准的 go 模块导入过程将通过获取 https://<your_module_name>@v.0.0.0 的内容来验证可用模块的校验和。

这就是为什么您会收到关于缺少“.”的投诉,因为它会尝试确保您提供的 URL 有效。这就是为什么当您将其命名为 mymodule.test 时它会失败,因为 go 模块指示的 URL(即 https://mymodule.test)不可用。

【讨论】:

  • 谢谢@aliras。这种解释对于外部依赖是有意义的。但是对于本地项目中的代码,即项目模块本身(已经在谷歌云源存储库中可用)——它可能不应该尝试将模块名称解释为 URL
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 2019-08-22
  • 2021-07-23
  • 2017-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
相关资源
最近更新 更多