As apps executadas no tempo de execução padrão do Go 1.12 ou superior podem usar qualquer pacote compatível com linux/amd64.
O App Engine requer que todas as declarações de importação no seu código Go especifiquem caminhos absolutos. Por exemplo, use:
import "github.com/example/mypackage"
Use módulos Go
Recomendamos que use módulos Go
para gerir dependências na sua app Go. Pode continuar a usar o modo GOPATH
mais antigo
se não estiver pronto para migrar
para módulos Go.
A partir da versão 1.22 e posteriores do Go:
Não pode usar
go get
fora de um módulo no modoGOPATH
antigo (GO111MODULE
=off
). Para mais informações, consulte Ferramentas.O Go recomenda que use um ficheiro
go.mod
para gerir dependências. Para instalar dependências durante a implementação, inclua um ficheirogo.mod
na mesma pasta que o ficheiroapp.yaml
. Para mais informações sobre as versões do Go e a gestão de dependências para diretórios de fornecedores, consulte os artigosGOPATH
e Módulos.
Quando implementa a sua app, o App Engine usa o comando go build
para criar a app e corresponde ao comportamento do próprio Go. Para garantir que a sua app usa o modo module-aware
, 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 os diretórios principais sucessivos até encontrar um ficheirogo.mod
.Se o App Engine não encontrar um ficheiro
go.mod
, segue o modoGOPATH
.Se definir a variável de ambiente
GO111MODULE
, certifique-se de que o valor da variável ativa o modomodule-aware
. 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.Para o Go 1.12, não localize o diretório da app na pasta
$GOPATH/src
. Se a sua app Go 1.12 estiver em qualquer parte da árvore de diretórios$GOPATH/src
, o App Engine segue o modoGOPATH
, mesmo que tenha definido um ficheirogo.mod
para a sua app.Para o Go 1.13 e posterior, o App Engine usa o modo
module-aware
por predefinição, a menos queGO111MODULE
substitua a predefinição ou não exista um ficheirogo.mod
no diretório da app.
Fornecimento de dependências
A venda copia os pacotes que a sua app usa para o diretório da aplicação, em vez de transferir módulos das respetivas origens durante o processo de compilação. O Go
fornece o comando go build
para
fornecer os pacotes de que a sua app precisa
num diretório denominado vendor
no diretório raiz da sua app.
No Go 1.14 e posterior, se o diretório raiz da sua app contiver um diretório com o nome
vendor
, o comando go build
e o processo de implementação do App Engine usam os pacotes no diretório vendor em vez de
transferirem módulos.
No Go 1.13 e anterior, o fornecimento só está disponível se configurar o seu ambiente para usar o modo GOPATH
.
Use dependências privadas
O App Engine não consegue transferir as suas dependências privadas durante o processo de compilação, pelo que tem de incluir as dependências com o código da aplicação na implementação.
Use 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