Я хочу развернуть облачную функцию Google , написанную на Go, со структурой кода, содержащей подкаталог, например:
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.go
использует методы из module1/module1.go
.
То же самое происходит, если источником является .zip
(содержащий несколько каталогов) в Google 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 (2-й пункт: Пакет в корне вашего проекта, который импортирует код из подпакета и экспортирует одну или несколько функций ), как предлагается в комментариях, но безуспешно.Вот структура, которую я использовал (работает локально):
.
├── function.go
├── go.mod
└── shared
├── go.mod
└── shared.go
go.mod
module testcloudfunction
require testcloudfunction/shared v0.0.0
replace testcloudfunction/shared => ./shared
function.go
package function
import (
"fmt"
"testcloudfunction/shared"
)
func HelloWorld(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, shared.Hello())
}
shared / go.mod
module testcloudfunction/shared
shared / shared.go
package shared
func Hello() string {
return "Hello World!"
}