La migrazione al runtime Go 1.12 e versioni successive consente di utilizzare funzionalità del linguaggio aggiornate e di creare app più portabili, con codice idiomatico.
Modifiche al runtime di App Engine Go 1.12 e versioni successive
Se stai prendendo in considerazione una migrazione al runtime Go 1.12 e versioni successive, tieni presente le seguenti differenze tra Go 1.12 e versioni successive e i runtime precedenti nell'ambiente standard di App Engine:
Per ridurre lo sforzo e la complessità della migrazione del runtime, l'ambiente standard di App Engine consente di accedere a molti dei servizi e delle API in bundle legacy con runtime Go 1.12 e versioni successive, come Memcache. L'app Go 1.12 o versioni successive può chiamare le API dei servizi in bundle tramite l'SDK App Engine per Go e accedere alla maggior parte delle stesse funzionalità del runtime Go 1.11.
Hai anche la possibilità di utilizzare prodotti Google Cloud che offrono funzionalità simili a quelle dei servizi in bundle legacy. Questi prodotti Google Cloud forniscono librerie client Cloud per Go idiomatiche. Per i servizi in bundle che non sono disponibili come prodotti separati in Google Cloud, come l'elaborazione di immagini, la ricerca e la messaggistica, puoi utilizzare provider di terze parti o altre soluzioni alternative.
Per saperne di più sulla migrazione a servizi non in bundle, consulta Migrazione dai servizi in bundle.
Il comportamento di alcuni elementi del file di configurazione
app.yaml
è stato modificato. Per ulteriori informazioni, vedi Modifiche al fileapp.yaml
.Il logging nel runtime Go 1.12 e versioni successive segue lo standard di logging in Cloud Logging. Nel runtime Go 1.12 e versioni successive, i log delle app non sono più raggruppati con i log delle richieste, ma sono separati in record diversi. Per scoprire di più sulla lettura e sulla scrittura dei log nel runtime Go 1.12 e versioni successive, consulta la guida al logging.
Modifiche al file app.yaml
Il comportamento di alcuni elementi del file di configurazione app.yaml
è stato modificato:
Elemento | Tipo di modifica | Descrizione |
---|---|---|
app_engine_apis |
Applicabile solo a Go 1.12 e versioni successive | Deve essere impostato su true se vuoi accedere ai
servizi in bundle legacy per Go 1.12 e versioni successive.
|
login |
Supportato se il valore di app_engine_apis è true |
Se non utilizzi i servizi in bundle legacy per Go 1.12 e versioni successive, utilizza questi metodi alternativi per autenticare gli utenti. |
runtime |
Modificato |
Modifica l'elemento runtime per specificare Go 1.12 o versioni successive.
|
Per ulteriori informazioni, consulta il riferimento app.yaml
.
Creazione di un pacchetto main
Il servizio deve includere un'istruzione package main
in almeno un file
di origine. In alternativa, se il servizio utilizza il pacchetto google.golang.org/appengine
, includi una chiamata a appengine.Main()
.
Scrittura di un pacchetto principale
Se il servizio non contiene già un pacchetto main
, aggiungi l'istruzione package main
e scrivi una funzione main()
. Come minimo, la funzione main()
deve:
Leggi la variabile di ambiente
PORT
e chiama la funzionehttp.ListenAndServe()
:
Registrazione dei gestori HTTP
Puoi registrare i tuoi gestori HTTP scegliendo una delle seguenti opzioni:
- Il metodo preferito consiste nello spostare manualmente tutte le chiamate
http.HandleFunc()
dai tuoi pacchetti alla funzionemain()
nel pacchettomain
. In alternativa, importa i pacchetti della tua applicazione nel pacchetto
main
, assicurandoti che ogni funzioneinit()
che contiene chiamate ahttp.HandleFunc()
venga eseguita all'avvio.Puoi trovare tutti i pacchetti che utilizzano la chiamata
http.HandleFunc()
con il seguente script bash e copiare l'output nel bloccoimport
del pacchettomain
: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
Strutturazione dei file
Go richiede che ogni pacchetto abbia una propria directory. Puoi indicare ad App Engine la posizione del pacchetto main
utilizzando main:
nel file app.yaml
del tuo progetto. Ad esempio, se la struttura dei file dell'app
ha il seguente aspetto:
myapp/ ├── app.yaml ├── foo.go ├── bar.go └── web/ └── main.go
Il file app.yaml
avrebbe:
main: ./web # Relative filepath to the directory containing your main package.
Per ulteriori informazioni sul flag main
, consulta il riferimento app.yaml
.
Spostamento di file su GOPATH
in corso...
Trova il tuo GOPATH
utilizzando il seguente comando:
go env GOPATH
Sposta tutti i file e le importazioni pertinenti nel tuo GOPATH
. Se utilizzi importazioni relative, come import ./guestbook
, aggiornale in modo da utilizzare il percorso completo: import github.com/example/myapp/guestbook
.