Die Migration zur Go 1.12+-Laufzeit bietet Ihnen die Möglichkeit, aktuelle Sprachfunktionen zu verwenden und mit idiomatischem Code portablere Anwendungen zu erstellen.
Änderungen in der App Engine Go 1.12+-Laufzeit
Wenn Sie eine Migration zur Go 1.12+-Laufzeit planen, müssen Sie die folgenden Unterschiede zwischen den Laufzeiten von Go 1.12+ und früheren Versionen in der App Engine-Standardumgebung beachten:
Zur Reduzierung des Aufwands und der Komplexität der Laufzeitmigration können Sie mit der App Engine-Standardumgebung auf viele der gebündelte Legacy-Dienste und -APIs in der Go 1.12+-Laufzeit zugreifen wie z. B. Memcache. Mit Ihrer Go 1.12+-Anwendung können die gebündelten Dienst-APIs über das App Engine SDK für Go aufgerufen und es kann auf die meisten Funktionen der Go 1.11-Laufzeit zugegriffen werden.
Sie haben auch die Möglichkeit, Google Cloud-Produkte zu verwenden, die vergleichbare Funktionen wie die gebündelten Legacy-Dienste bereitstellen. Diese Google Cloud-Produkte bieten idiomatische Cloud-Clientbibliotheken für Go. Für die gebündelten Dienste, die in Google Cloud nicht als eigenständige Produkte verfügbar sind, wie Bildverarbeitung, Suche oder Messaging, können Sie Drittanbieter oder andere Behelfslösungen verwenden.
Weitere Informationen zur Migration zu nicht gebündelten Diensten finden Sie unter Von gebündelten Diensten migrieren.
Das Verhalten einiger Elemente in der Konfigurationsdatei
app.yaml
wurde geändert: Weitere Informationen finden Sie unter Änderungen an der Dateiapp.yaml
.Das Logging in der Go 1.12+-Laufzeit folgt dem Logging-Standard von Cloud Logging. In der Laufzeit von Go 1.12+ werden Anwendungslogs nicht mehr mit den Anfragelogs gebündelt, sondern in verschiedenen Datensätzen getrennt. Weitere Informationen zum Lesen und Schreiben von Logs in der Go 1.12+-Laufzeit finden Sie in der Logging-Anleitung.
Änderungen an der Datei app.yaml
Das Verhalten einiger Elemente in der Konfigurationsdatei app.yaml
wurde geändert:
Element | Änderungstyp | Beschreibung |
---|---|---|
app_engine_apis |
Gilt nur für Go 1.12+ | Muss auf true gesetzt werden, wenn Sie auf die
gebündelten Legacy-Dienste für Go 1.12 oder höher zugreifen möchten.
|
login |
Unterstützt, wenn für app_engine_apis der Wert true gilt. |
Wenn Sie keine gebündelten Legacy-Dienste für Go 1.12+ nutzen, können Sie diese alternativen Methoden zur Authentifizierung von Nutzern verwenden. |
runtime |
Geändert |
Ändern Sie das Element runtime so, dass Go 1.12+ angegeben wird.
|
Weitere Informationen finden Sie in der Referenz zu app.yaml
.
main
-Paket erstellen
Ihr Dienst muss in mindestens einer Quelldatei eine package main
-Anweisung enthalten. Alternativ können Sie einen Aufruf von appengine.Main()
hinzufügen, wenn Ihr Dienst das Paket google.golang.org/appengine
verwendet.
main-Paket schreiben
Wenn Ihr Dienst noch kein main
-Paket enthält, fügen Sie die Anweisung package main
hinzu und schreiben Sie eine main()
-Funktion. Die Funktion main()
muss mindestens:
Die Umgebungsvariable
PORT
lesen und die Funktionhttp.ListenAndServe()
aufrufen:
HTTP-Handler registrieren
Wählen Sie eine der folgenden Optionen, mit denen sich HTTP-Handler registrieren lassen:
- Die bevorzugte Methode besteht darin, alle
http.HandleFunc()
-Aufrufe von Ihren Paketen manuell in diemain()
-Funktion in Ihremmain
-Paket zu verschieben. Alternativ können Sie die Pakete Ihrer Anwendung in das
main
-Paket importieren. Bei dieser Vorgehensweise müssen Sie gewährleisten, dass jedeinit()
-Funktion, die Aufrufe vonhttp.HandleFunc()
enthält, beim Start ausgeführt wird.Sie können alle Pakete, die den
http.HandleFunc()
-Aufruf verwenden, mit dem folgenden Bash-Skript finden und die Ausgabe in denimport
-Block Ihresmain
-Pakets kopieren: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
Dateien strukturieren
Go erfordert, dass jedes Paket über ein eigenes Verzeichnis verfügt. Sie können App Engine mitteilen, wo sich Ihr main
-Paket befindet, indem Sie main:
in der app.yaml
-Datei Ihres Projekts verwenden. Beispiel: Wenn die Dateistruktur Ihrer Anwendung so aussieht:
myapp/ ├── app.yaml ├── foo.go ├── bar.go └── web/ └── main.go
Hätte Ihre app.yaml
-Datei Folgendes:
main: ./web # Relative filepath to the directory containing your main package.
Weitere Informationen zum Flag main
finden Sie in der app.yaml
-Referenz.
Dateien in GOPATH
verschieben
Ihren GOPATH
finden Sie mit dem folgenden Befehl:
go env GOPATH
Verschieben Sie alle relevanten Dateien und Importe in GOPATH
. Wenn Sie relative Importe wie import ./guestbook
verwenden, aktualisieren Sie Ihre Importe, um den vollständigen Pfad zu verwenden: import github.com/example/myapp/guestbook
.