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 getfora de um módulo no modoGOPATHlegado (GO111MODULE=off). Para mais informações, consulte Ferramentas.O Go recomenda o uso de um arquivo
go.modpara gerenciar dependências. Para instalar dependências durante a implantação, inclua um arquivogo.modna 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, consulteGOPATHe 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.moddo 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ávelGO111MODULEe corresponde ao próprio comportamento do Go. O App Engine só aplicará a configuração da variávelGO111MODULEse você tiver incluído um arquivogo.modpara 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.modpara o app.Para o Go 1.13 e versões mais recentes, o App Engine usa o modo
module-awarepor padrão, a menos queGO111MODULEsubstitua o padrão ou um arquivogo.modnã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 /myappCrie um diretório contendo suas dependências particulares:
mkdir privateVerifique 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/fooAtualize o arquivo
go.modpara usar a diretivareplacee usar o diretórioprivatepara sua dependência:go mod edit -replace=private.example.com/foo=./private/private.example.com/fooSeu arquivo
go.modterá esta aparência:Arquivo
go.modfinalmodule private.example.com/myapp require private.example.com/foo v1.2.3 replace private.example.com/foo => ./private/private.example.com/fooArquivo
go.modoriginalmodule private.example.com/myapp require private.example.com/foo v1.2.3Não modifique a forma como você importa e usa seu pacote particular. Sua instrução
importficará assim:import "private.example.com/foo"Para incluir a dependência particular na implantação, implante o aplicativo:
gcloud app deploy