Вы можете использовать подпакеты с Go модулями . Модули Go - это новое решение Go для управления зависимостями - они позволяют вам работать за пределами GOPATH
и позволяют управлять точными версиями каждой имеющейся зависимости.
Модули также позволяют определить группу пакетов Go с одинаковым префиксом пути импорта. Когда вы пишете функцию, это позволяет вам импортировать другие пакеты в ваш модуль.
Развертываемая функция должна находиться в корне вашего модуля.
Ниже приведен пример структуры файла и порядок импорта пакетов:
.
├── cmd
│ └── main.go # Useful for testing. Can import and setup your function.
├── function.go # Can import example.com/foo/helperpackage
├── function_test.go
├── go.mod # module example.com/foo
└── helperpackage
└── helper.go
Эта установка имеет вашу функцию в function.go
и проверена function_test.go
. Они находятся в модуле с именем example.com/foo
. helperpackage
можно импортировать с помощью function.go
, используя example.com/foo/helperpackage
.
Здесь также есть каталог cmd
, который может быть полезен для локального тестирования. Вы можете импортировать example.com/foo
и запустить HTTP-сервер, который регистрирует вашу функцию как обработчик HTTP. Например:
package main
import (
"log"
"net/http"
"example.com/foo"
)
func main() {
http.Handle("/HelloHTTP", foo.HelloHTTP)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Примечание: вы могли бы использовать каталог поставщиков для достижения того же результата. Но все пакеты, которые импортирует ваша функция, должны находиться в каталоге vendor (с полным путем импорта), который работает, но неудобен в обслуживании. Редко копировать подпакеты в каталог вашего поставщика, поэтому я бы не рекомендовал это.