我想部署一个用 Go 编写的 Google Cloud Function,其代码结构包含一个子目录,如下所示:
function
├── module1
│ ├── go.mod
│ └── module1.go
├── go.mod
└── entrypoint.go
但是当我部署函数时,使用 GCP 控制台或gcloud命令:
# from function/ directory
gcloud functions deploy myfunction --runtime go111 [...]
仅go.mod和entrypoint.go已上传(我检查了GCP 控制台中函数详细信息的源选项卡)。因此该函数无法部署,因为显然使用了.entrypoint.gomodule1/module1.go
如果源是.zipGoogle Cloud Storage 上的一个(包含多个目录),也会发生同样的情况:
gcloud functions deploy myfunction \
--runtime go111 \
--source gs://${BUCKET}/function.zip [...]
是否可以使用带有子目录的代码结构来部署函数?我不知道其他运行时(Python、NodeJS)是否也会发生同样的情况,或者该问题是否特定于 Go。
编辑
我试着遵循这个指南:https://cloud.google.com/functions/docs/writing/#functions-writing-file-structuring-go(第二点:项目根目录下的一个包,它从子包并导出一个或多个函数),如评论中所建议的那样,但没有成功。这是我使用的结构(在本地工作):
.
├── function.go
├── go.mod
└── shared
├── go.mod
└── shared.go
go.mod
module testcloudfunction
require testcloudfunction/shared v0.0.0
replace testcloudfunction/shared => ./shared
函数.go
package function
import (
"fmt"
"testcloudfunction/shared"
)
func HelloWorld(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, shared.Hello())
}
共享/go.mod
module testcloudfunction/shared
共享/shared.go
package shared
func Hello() string {
return "Hello World!"
}
富国沪深
相关分类