Как я могу использовать подпакеты с Go в облачных функциях Google? - PullRequest
0 голосов
/ 18 января 2019

Я бы хотел использовать вспомогательный пакет из Go Cloud Function. Пакет имеет некоторую вспомогательную логику, которая может совместно использоваться несколькими функциями. Но как правильно структурировать пакеты, чтобы они все работали? Пакет должен быть в том же проекте - не опубликован и опубликован как совершенно отдельный пакет.

Я работаю в Google. Цель этого вопроса - заранее ответить на распространенные вопросы и помочь разработчикам начать с Go на GCF.

1 Ответ

0 голосов
/ 18 января 2019

Вы можете использовать подпакеты с 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 (с полным путем импорта), который работает, но неудобен в обслуживании. Редко копировать подпакеты в каталог вашего поставщика, поэтому я бы не рекомендовал это.

...