Como especificar dependências

Os aplicativos executados no ambiente de execução padrão do Go 1.12+ podem usar qualquer pacote compatível com Linux/amd64.

Como usar os módulos do Go

Recomendamos que você use módulos Go para gerenciar dependências no app Go, mas será possível continuar usando o modo GOPATH mais antigo se não estiver pronto para migrar para módulos Go.

Quando você implanta o aplicativo, o App Engine usa o comando go build para criar o aplicativo e, portanto, corresponde ao comportamento do Go. Para garantir que o aplicativo use o modo de reconhecimento de módulo, faça o seguinte no ambiente de desenvolvimento:

  • Crie o arquivo go.mod do módulo no mesmo diretório que seu arquivo app.yaml. O App Engine pesquisa o diretório atual e, em seguida, os diretórios pai sucessivos até encontrar um arquivo go.mod.

    Se o Google App Engine não encontrar um arquivo go.mod, ele seguirá o modo GOPATH.

  • Se você configurar a variável de ambiente GO111MODULE, certifique-se de que o valor da variável ative o modo de reconhecimento de módulo. Quando você implanta o aplicativo, o App Engine verifica o ambiente para GO111MODULE e corresponde ao próprio comportamento do Go. O App Engine só aplicará a configuração da variável GO111MODULE se você tiver incluído um arquivo go.mod para o aplicativo.

  • No Go 1.12, não localize o diretório do app em $GOPATH/src. Se o aplicativo Go 1.12 estiver em qualquer lugar na árvore de diretórios $GOPATH/src, o App Engine seguirá o modo GOPATH, mesmo que você tenha definido um arquivo go.mod para o app.

    No Go 1.13 e versões mais recentes, o App Engine usa o modo de reconhecimento de módulo por padrão, a menos que GO111MODULE modifique o padrão ou um arquivo go.mod não exista no diretório do aplicativo.

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, se o diretório raiz do seu aplicativo contiver um diretório chamado vendor, o comando go build (e, portanto, o processo de implantação do App Engine) usará 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.

Como usar dependências particulares

O App Engine não pode fazer o download das dependências particulares durante o processo de criação. Portanto, você precisa incluí-las com o código do aplicativo na implantação.

Você precisará usar 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/:

  1. Altere para o diretório do aplicativo:

    cd /myapp
    
  2. 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
    
  3. Atualize o arquivo go.mod para usar a diretiva replace e usar o diretório private 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 final

    module 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 original

    module private.example.com/myapp
    
    require private.example.com/foo v1.2.3
    
  4. Não modifique o modo de importação e uso do pacote particular. Sua instrução import deve ser semelhante a:

    import "private.example.com/foo"
    
  5. Para incluir a dependência particular na implantação, implante o aplicativo:

    gcloud app deploy