Especificar dependências

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 ficheiro app.yaml. O App Engine pesquisa o diretório atual e, em seguida, os diretórios principais sucessivos até encontrar um ficheiro go.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 para GO111MODULE e corresponde ao comportamento do próprio Go. O App Engine só aplica a definição da variável GO111MODULE se tiver incluído um ficheiro go.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 ficheiro go.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/:

  1. Altere para o diretório da app:

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

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

    module private.example.com/myapp
    
    require private.example.com/foo v1.2.3
    
  4. 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"
    
  5. Inclua a sua dependência privada na implementação implementando a sua app:

    gcloud app deploy