我在尝试使用Go模块在Go 1.11中部署Google云功能时遇到问题。我的GOPATH
中具有以下代码结构:
└── example
├── models
│ ├── go.mod
│ └── models.go
└── load
├── fn.go
├── go.mod
├── go.sum
└── vendor
└── ....
load / go.mod如下所示:
module github.com/example/load
require (
github.com/example/models v0.0.0
)
replace github.com/example/models => ../models
当我尝试使用命令部署功能时
gcloud functions deploy load-data --entry-point GCSNewFileTrigger --runtime go111 --trigger-resource new_data --trigger-event google.storage.object.finalize
我收到以下错误:
Deploying function (may take a while - up to 2 minutes)...failed.
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: go: parsing /models/go.mod: open /models/go.mod: no such file or directory
go: error loading module requirements
命令go mod vendor
和go mod verify
在本地成功运行,我可以在models
的供应商文件夹中看到我的本地软件包load
答案 0 :(得分:4)
与供应商相比,制造商更喜欢使用模块。如果有go.mod
,将使用模块。当您上载函数时,它仅包含函数所在目录的根目录,而不包含上一级目录。因此,当有一个go.mod
且您有一个指向上一级的replace指令时,它将不起作用。
解决方案是针对供应商,而不是上传go.mod
/ go.sum
文件。使用gcloud
时,您可以创建一个.gcloudignore
文件来为您执行此操作。有关更多详细信息,请参见https://cloud.google.com/functions/docs/concepts/go-runtime#specifying_dependencies。
免责声明:我在Google和该产品上工作。