O Cloud Functions no Go precisa fornecer todas as suas dependências por meio de módulos Go com um arquivo go.mod
ou um diretório vendor
. Sua função não pode
especificar dependências usando os módulos Go e um diretório vendor
ao mesmo
tempo.
O ambiente de execução Go inclui vários pacotes do sistema no ambiente de execução. Se a função usar uma dependência que exija um pacote que não esteja listado, será possível solicitá-lo.
O conteúdo deste documento se aplica ao Go 1.11 e Go 1.13.
Como usar os módulos do Go
O Cloud Functions é compatível com a
funcionalidade experimental de módulos
(em inglês) do Go, que permite especificar dependências em um arquivo go.mod
na raiz
do projeto. Ao implantar a função, as dependências especificadas no arquivo go.mod
são buscadas e criadas automaticamente.
O comportamento dos módulos Go varia conforme o desenvolvimento ocorre dentro ou fora do GOPATH
. Para determinar se você está dentro do GOPATH
:
Navegue até o diretório do projeto.
Encontre seu
GOPATH
executando o comando:go env GOPATH
Isso gera uma linha semelhante a:
GOPATH=YOUR_GOPATH
Encontre o diretório de trabalho atual executando:
pwd
Se o diretório de trabalho começa com YOUR_GOPATH
, você está dentro do GOPATH
. Nesse caso, gere o arquivo go.mod
executando os três comandos a seguir:
export GO111MODULE=on go mod init go mod tidy
Se o diretório de trabalho não começar com YOUR_GOPATH
, você está fora de GOPATH
. Nesse caso, gere o arquivo go.mod
executando os comandos:
go mod init MODULE go mod tidy
No exemplo acima, MODULE
é o nome do módulo.
Por exemplo, o nome do módulo pode ser example.com/myproject
(o nome de domínio é obrigatório). O comando go
detecta automaticamente o nome do módulo quando você está dentro do GOPATH
.
Depois de criar um arquivo go.mod
, use o comando go get
para buscar dependências e adicioná-las automaticamente ao projeto. Por exemplo:
go get DEPENDENCY
No exemplo acima, DEPENDENCY
é uma dependência que você quer adicionar à função. Por exemplo, o comando
go get cloud.google.com/go/storage
adiciona a biblioteca de cliente do Cloud Storage
à sua função.
Como usar um diretório vendor
O Cloud Functions também permite incluir dependências por meio de um
diretório vendor
(em inglês). Na maioria das vezes, os diretórios vendor
são mantidos com um gerenciador de dependências.
É possível usar qualquer gerenciador de dependências que você preferir. Por exemplo, você pode usar a funcionalidade dos módulos do Go para criar um diretório vendor
a partir do arquivo go.mod
.
Usar um diretório vendor
é útil se a dependência não estiver disponível por meio de um
gerenciador de dependências ou se o acesso à Internet do ambiente do Cloud Functions
for restrito.
Se você tiver um arquivo go.mod
e um diretório vendor
, o diretório vendor
será ignorado quando você implantar a função. Use um arquivo .gcloudignore
(em inglês) para evitar o upload dos arquivos go.mod
e go.sum
. Nesse caso, o conteúdo do diretório vendor
será respeitado:
Crie um arquivo
.gcloudignore
na raiz do diretório do projeto com o seguinte conteúdo:go.mod go.sum # Also ignore Git directories. Delete the following two lines if you want to # upload them. .git .gitignore
Crie um diretório
vendor
com o conteúdo do arquivogo.mod
executando o comando a seguir:go mod vendor
Como usar dependências privadas
Se as dependências da função estiverem hospedadas em um repositório que não é acessível publicamente, use um diretório vendor
para buscar as dependências antes de implantar a função. Se você pretende usar um arquivo go.mod
,
consulte as instruções acima para evitar conflitos entre o arquivo go.mod
e o diretório vendor
.