Os aplicativos executados no ambiente de execução padrão do Go 1.12+ podem usar qualquer pacote compatível com Linux/amd64.
O App Engine exige que todas as instruções de importação no código Go especifiquem caminhos absolutos. Por exemplo, use:
import "github.com/example/mypackage"
Usar módulos do Go
Recomendamos que você use módulos do Go
para gerenciar dependências no seu appem Go. É possível continuar usando o modo GOPATH
mais antigo
se não quiser migrar
para os módulos do Go.
A partir da versão 1.22 e mais recente do Go:
Não é possível usar
go get
fora de um módulo no modoGOPATH
legado (GO111MODULE
=off
). Para mais informações, consulte Ferramentas.O Go recomenda o uso de um arquivo
go.mod
para gerenciar dependências. Para instalar dependências durante a implantação, inclua um arquivogo.mod
na mesma pasta que o arquivoapp.yaml
. Para mais informações sobre versões do Go e como gerenciar dependências dos diretórios de fornecedores, consulteGOPATH
e módulos.
Quando você implanta o aplicativo, o App Engine usa o comando go build
para
criar o aplicativo e corresponde ao comportamento do Go. Para garantir que
o app use o modo module-aware
, realize as seguintes ações no ambiente
de desenvolvimento:
Crie o arquivo
go.mod
do módulo no mesmo diretório que seu arquivoapp.yaml
. O App Engine pesquisa o diretório atual e os diretórios pais sucessivos até encontrar um arquivogo.mod
.Se o App Engine não encontrar um arquivo
go.mod
, ele seguirá o modoGOPATH
.Se você definir a variável de ambiente
GO111MODULE
, verifique se o valor dela ativa o modomodule-aware
. Quando você implanta o aplicativo, o App Engine verifica o ambiente para localizar a variávelGO111MODULE
e corresponde ao próprio comportamento do Go. O App Engine só aplicará a configuração da variávelGO111MODULE
se você tiver incluído um arquivogo.mod
para o seu app.No Go 1.12, não localize o diretório do app na pasta
$GOPATH/src
. Se o aplicativo Go 1.12 estiver em qualquer lugar na árvore de diretórios$GOPATH/src
, o App Engine seguirá o modoGOPATH
, mesmo que você tenha definido um arquivogo.mod
para o app.Para o Go 1.13 e versões mais recentes, o App Engine usa o modo
module-aware
por padrão, a menos queGO111MODULE
substitua o padrão ou um arquivogo.mod
não existe no diretório do app.
Disponibilização de pacotes de terceiros para dependências
A disponibilização de pacotes de terceiros copia os pacotes que seu aplicativo usa para o diretório do aplicativo em vez de fazer o download dos módulos das fontes durante o processo de criação. O Go fornece o comando go build
para disponibilizar pacotes de terceiros necessários para seu aplicativo em um diretório chamado vendor
no diretório raiz do aplicativo.
No Go 1.14 e em versões posteriores, se o diretório raiz do aplicativo tiver um diretório chamado
vendor
, o comando go build
e o processo de implantação do App Engine
usarão os pacotes no diretório do fornecedor em vez de
fazer o download de módulos.
No Go 1.13 e versões anteriores, a disponibilização de pacotes de terceiros só estará disponível se você configurar o
ambiente para usar o modo GOPATH
.
Usar dependências particulares
O App Engine não pode fazer o download das dependências particulares durante o processo de criação. Dessa forma, é necessário incluí-las com o código do app na implantação.
Use a diretiva replace
no arquivo go.mod
para declarar
dependências particulares. O exemplo a seguir supõe que seu aplicativo esteja no
diretório /myapp/
:
Altere para o diretório do aplicativo:
cd /myapp
Crie um diretório contendo suas dependências particulares:
mkdir private
Verifique se a dependência particular está no diretório
private
. Uma abordagem é criar um link simbólico:mkdir private/private.example.com ln -s /path/to/private.example.com/foo private/private.example.com/foo
Atualize o arquivo
go.mod
para usar a diretivareplace
e usar o diretórioprivate
para sua dependência:go mod edit -replace=private.example.com/foo=./private/private.example.com/foo
Seu arquivo
go.mod
terá esta aparência:Arquivo
go.mod
finalmodule private.example.com/myapp require private.example.com/foo v1.2.3 replace private.example.com/foo => ./private/private.example.com/foo
Arquivo
go.mod
originalmodule private.example.com/myapp require private.example.com/foo v1.2.3
Não modifique a forma como você importa e usa seu pacote particular. Sua instrução
import
ficará assim:import "private.example.com/foo"
Para incluir a dependência particular na implantação, implante o aplicativo:
gcloud app deploy