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.mod
do 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 paraGO111MODULE
e corresponde ao comportamento do próprio Go. O App Engine só aplica a definição da variávelGO111MODULE
se tiver incluído um ficheirogo.mod
para a sua app.
- Não localize o diretório da sua app em
$GOPATH/src
nem 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.mod
para 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 /myapp
Crie um diretório que contenha as suas dependências privadas:
mkdir private
Certifique-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/foo
Atualize o ficheiro
go.mod
para usar a diretivareplace
para usar o diretórioprivate
para a sua dependência:go mod edit -replace=private.example.com/foo=./private/private.example.com/foo
O seu ficheiro
go.mod
deve ter agora o seguinte aspeto:Ficheiro
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
Ficheiro
go.mod
originalmodule private.example.com/myapp require private.example.com/foo v1.2.3
Não modifique a forma como importa e usa o seu pacote privado. A sua declaração
import
deve 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