As apps executadas no tempo de execução padrão do Go 1.11 podem usar qualquer pacote compatível com linux/amd64.
Usar módulos Go
Recomendamos que use módulos Go para gerir dependências na sua app Go, mas pode continuar a usar o modo GOPATH mais antigo se não estiver pronto para migrar para módulos Go.
Quando implementa a sua app, o App Engine usa o comando go build para criar a app e, por isso, corresponde ao comportamento do próprio Go. Para garantir que a sua app usa o modo com reconhecimento de módulos, faça o seguinte no seu ambiente de desenvolvimento:
Crie o ficheiro
go.moddo módulo no mesmo diretório que o ficheiroapp.yaml. O App Engine pesquisa o diretório atual e, em seguida, os diretórios principais sucessivos até encontrar um ficheirogo.mod.Se o App Engine não encontrar um ficheiro
go.mod, segue o modo GOPATH.Se definir a variável de ambiente
GO111MODULE, certifique-se de que o valor da variável ativa o modo com reconhecimento de módulos. Quando implementa a sua app, o App Engine verifica o seu ambiente paraGO111MODULEe corresponde ao comportamento do próprio Go. O App Engine só aplica a definição da variávelGO111MODULEse tiver incluído um ficheirogo.modpara a sua app.
- Não localize o diretório da sua app em
$GOPATH/srcnem abaixo deste. Se a sua app estiver em qualquer parte da árvore de diretórios$GOPATH/src, o App Engine segue o modo GOPATH, mesmo que tenha definido um ficheirogo.modpara a sua app.
Usar dependências privadas
O App Engine não pode transferir as suas dependências privadas durante o processo de compilação, pelo que tem de as incluir no código da aplicação no momento da implementação.
Tem de usar a diretiva replace no ficheiro go.mod para declarar dependências privadas. O exemplo seguinte pressupõe que a sua app está no diretório /myapp/:
Altere para o diretório da app:
cd /myappCrie um diretório que contenha as suas dependências privadas:
mkdir privateCertifique-se de que a dependência privada está no diretório
private. Uma das abordagens é criar um link simbólico:mkdir private/private.example.com ln -s /path/to/private.example.com/foo private/private.example.com/fooAtualize o ficheiro
go.modpara usar a diretivareplacepara usar o diretórioprivatepara a sua dependência:go mod edit -replace=private.example.com/foo=./private/private.example.com/fooO seu ficheiro
go.moddeve ter agora o seguinte aspeto:Ficheiro
go.modfinalmodule private.example.com/myapp require private.example.com/foo v1.2.3 replace private.example.com/foo => ./private/private.example.com/fooFicheiro
go.modoriginalmodule private.example.com/myapp require private.example.com/foo v1.2.3Não modifique a forma como importa e usa o seu pacote privado. A sua declaração
importdeve ter o seguinte aspeto:import "private.example.com/foo"Inclua a sua dependência privada na implementação implementando a sua app:
gcloud app deploy