假设我们有这样的代码结构:
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。总和,.gcloudignore和v1 / pkg的供应商/
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 被提供给每个CRUD函数/目录,就像 v1 / api / pets / create
问题: 该项目在生产应用程序上非常庞大,它(当然)包含更多的方法和更多的代码,所有这些东西都滞后了,因为这些供应商目录约为4MB
如何将v1 / pkg包含在每个CRUD文件夹中?你们最简单的方法是什么?
我们尝试的内容:
使用专用存储库而不是本地路径->部署时不起作用
在root用户中使用functions.go,并在其中定义所有功能->为每个功能上传整个源代码,我们显然不希望这样做
使用/ pkg中的代码分别对每个函数(c / p)进行维护,而且没有任何意义
How can I use a sub-packages with Go on Google Cloud Functions?->这不是我们的用例,“ helperpackage”应该在树的上方
答案 0 :(得分:1)
没有魔术可以做。像您第二次尝试那样的东西是最好的选择,但是不要在根目录下使用function.go
gcloud functions deploy --source=v1/api/pets/create <function_name> --trigger-http --runtime=go113 --entry-point=<method-name>
上传整个项目不是一个真正的问题,因为在Go中,仅保留编译的二进制文件,而所有源文件都被丢弃。因此,二进制文件旁边将没有多余的文件。
但是,如果您确实想限制上传的代码,则可以使用--ignore-file=
parameter