A migração para o ambiente de execução do Go 1.12+ permite usar recursos de linguagem atualizados e criar aplicativos mais portáteis, com código idiomático.
Alterações no ambiente de execução do Go 1.12+ do App Engine
Se você estiver pensando em migrar para o ambiente de execução do Go 1.12+, esteja ciente das seguintes diferenças entre os ambientes de execução do Go 1.12+ e ambientes anteriores no ambiente padrão do App Engine:
Para reduzir o esforço e a complexidade da migração no ambiente de execução, o ambiente padrão do App Engine permite acessar vários serviços e APIs em pacote legados no ambiente de execução do Go 1.12+, como o Memcache. O aplicativo Go 1.12+ pode chamar as APIs de serviços incluídos pelo SDK do App Engine para Go e acessar a maioria das mesmas funcionalidades que o ambiente de execução do Go 1.11.
Você também tem a opção de usar produtos do Google Cloud que oferecem funcionalidades semelhantes aos serviços incluídos legados. Esses produtos do Google Cloud oferecem bibliotecas de cliente idiomáticas do Cloud para Go. Para os serviços incluídos que não estão disponíveis como produtos separados no Google Cloud, como processamento de imagens, pesquisa e mensagens, use provedores de terceiros ou outras soluções alternativas.
Para saber mais sobre como migrar para serviços desagrupados, consulte Como migrar de serviços incluídos.
O comportamento de alguns elementos no arquivo de configuração
app.yaml
foi modificado. Para obter mais informações, consulte Alterações no arquivoapp.yaml
.A geração de registros no ambiente de execução do Go 1.12+ segue o padrão de geração de registros no Cloud Logging. No ambiente de execução do Go 1.12+, os registros de aplicativos não são mais incluídos com os registros de solicitação, mas são separados em registros diferentes. Para saber mais sobre como ler e gravar registros no ambiente de execução do Go 1.12+, consulte o guia de geração de registros.
Alterações no arquivo app.yaml
O comportamento de alguns elementos no arquivo de configuração app.yaml
foi modificado:
Elemento | Tipo de alteração | Descrição |
---|---|---|
app_engine_apis |
Aplicável somente para o Go 1.12+ | Defina como true se você quiser acessar os
serviços agrupados legados para o Go 1.12+.
|
login |
Compatível se app_engine_apis for true |
Se você não estiver usando os serviços incluídos legados para Go 1.12+, use estes métodos alternativos para autenticar usuários. |
runtime |
Modificado |
Altere o elemento runtime para
especificar o Go 1.12+.
|
Para obter mais informações, consulte a
referência app.yaml
.
Como criar um pacote main
O serviço precisa incluir uma instrução package main
em pelo menos um arquivo de origem. Como alternativa, se o serviço estiver usando o pacote google.golang.org/appengine
,
inclua uma chamada para appengine.Main()
.
Como gravar um pacote principal
Se o serviço ainda não tiver um pacote main
, adicione a instrução package main
e grave uma função main()
. No mínimo,
a função main()
precisa:
Ler a variável de ambiente
PORT
e chamar a funçãohttp.ListenAndServe()
:
Como registrar os gerenciadores HTTP
É possível registrar seus gerenciadores HTTP escolhendo uma das seguintes opções:
- O método preferido é mover manualmente todas as chamadas
http.HandleFunc()
dos seus pacotes para a funçãomain()
no pacotemain
. Como alternativa, importe os pacotes do aplicativo para o pacote
main
, garantindo que cada funçãoinit()
que contém chamadas parahttp.HandleFunc()
seja executada na inicialização.É possível todos os pacotes que usam a chamada
http.HandleFunc()
com o script bash a seguir e copiar a saída para o blocoimport
do pacotemain
:gp=$(go env GOPATH) && p=$(pwd) && pkg=${p#"$gp/src/"} && find . -name "*.go" | xargs grep "http.HandleFunc" --files-with-matches | grep -v vendor/ | grep -v '/main.go' | sed "s#\./\(.*\)/[^/]\+\.go#\t_ \"$pkg/\1\"#" | sort | uniq
Como estruturar seus arquivos
O Go requer que cada pacote tenha o próprio diretório. É possível informar ao App Engine onde está seu pacote main
usando main:
no arquivo app.yaml
do projeto. Por exemplo, se a estrutura de arquivos do aplicativo tiver esta aparência:
myapp/ ├── app.yaml ├── foo.go ├── bar.go └── web/ └── main.go
O arquivo app.yaml
teria:
main: ./web # Relative filepath to the directory containing your main package.
Para obter mais informações sobre a sinalização main
, consulte a referência de app.yaml
.
Como mover arquivos para o GOPATH
Encontre o GOPATH
usando o seguinte comando:
go env GOPATH
Mova todos os arquivos relevantes e importa para GOPATH
. Se estiver usando importações relativas, como import ./guestbook
, atualize as importações para usar o caminho completo: import github.com/example/myapp/guestbook
.