【发布时间】:2021-01-14 19:26:37
【问题描述】:
假设我们有这样的代码结构:
v1/
---api/
------pets/
---------create/
------------server.go
------------cmd/
---------------main.go
------------go.mod
------------go.sum
------------.gcloudignore
------------vendor/
---------get/
---------update/
---------delete/
------food/
---------create/
---------get/
---pkg/
------constants/
---------constants.go
------model/
---------pet.go
---------food.go
------store/
---------firestore.go
------validate/
---------header.go
------go.mod
------go.sum
每个 CRUD 函数目录(pets/get、food/create 等)与 pets/create 的结构相同,因此它们都包含:用于测试的 server.go、cmd/main.go、go.mod、go。 v1/pkg 的总和、.gcloudignore 和 vendor/
v1/api/pets/create/go.mod 包含:
module bitbucket.org/company/project/v1/api/pets/create
go 1.14
replace bitbucket.org/company/project/v1/pkg => ../../../pkg
require (
bitbucket.org/company/project/v1/pkg v0.0.0-00010101000000-000000000000
github.com/GoogleCloudPlatform/functions-framework-go v1.1.0
)
v1/api/pets/create/server.go 包含将部署到 GCF 的方法
.gcloudignore 包含 go.mod 和 go.sum 以在部署时忽略它们
v1/pkg 像 v1/api/pets/create
一样被供应到每个 CRUD 函数/目录中问题: 项目在生产应用程序上是巨大的,它包含(当然)更多的方法和更多的代码,一切都滞后,因为那些供应商目录是 ~4MB
如何将 v1/pkg 包含到每个 CRUD 文件夹中?你们用的最简单的方法是什么?
我们尝试了什么:
-
使用私有仓库而不是本地路径 -> 部署时不工作
-
在 root 中使用 functions.go,所有函数都在那里定义 -> 为每个函数上传完整的源代码,我们显然不希望这样
-
将 /pkg 中的代码分别用于每个函数 (c/p),这是不可维护且没有任何意义的
-
How can I use a sub-packages with Go on Google Cloud Functions? -> 这不是我们的用例,“helperpackage”应该在树的上层
【问题讨论】:
-
你如何部署你的功能?
-
定位到v1/api/pets/create,然后:gcloud functions deploy
--trigger-http --runtime=go113 --entry-point=
标签: rest go google-cloud-platform google-cloud-functions go-modules