Como especificar dependências

Os aplicativos executados no ambiente de execução padrão do Go 1.11 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.

  • Não coloque o diretório do seu app em $GOPATH/src ou abaixo dele. Se o aplicativo 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 aplicativo.

Como usar dependências privadas

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