Anwendungen, die in der Go 1.12-Standardlaufzeit oder höher ausgeführt werden, können jedes mit Linux/amd64 kompatible Paket verwenden.
Wichtig: In App Engine müssen alle Importanweisungen in Ihrem Go-Code absolute Pfade angeben. Verwenden Sie zum Beispiel:
import "github.com/example/mypackage"
Go-Module verwenden
Wir empfehlen die Verwendung von Go-Modulen zur Verwaltung von Abhängigkeiten in Ihrer Go-Anwendung. Sie können jedoch weiterhin den älteren GOPATH-Modus verwenden, wenn Sie noch nicht für die Migration auf Go-Module bereit sind.
Ab Go Version 1.22:
Sie können
go getnicht außerhalb eines Moduls im altenGOPATH-Modus (GO111MODULE=off) verwenden. Weitere Informationen finden Sie unter Tools.In Go wird empfohlen, eine
go.mod-Datei zum Verwalten von Abhängigkeiten zu verwenden. Wenn Sie Abhängigkeiten während des Deployments installieren möchten, fügen Sie einego.mod-Datei in denselben Ordner wie dieapp.yaml-Datei ein. Weitere Informationen zu Go-Versionen und zum Verwalten von Abhängigkeiten für Anbieterverzeichnisse finden Sie unterGOPATHund Module.
Wenn Sie die Anwendung bereitstellen, verwendet App Engine den Befehl go build zum Erstellen der Anwendung und verhält sich entsprechend wie Go selbst. Führen Sie folgende Schritte in Ihrer Entwicklungsumgebung aus, um sicherzustellen, dass Ihre Anwendung den module-aware-Modus verwendet:
Erstellen Sie die
go.mod-Datei Ihres Moduls im gleichen Verzeichnis wie Ihreapp.yaml-Datei. App Engine durchsucht das aktuelle Verzeichnis und die übergeordneten Verzeichnisse, bis einego.mod-Datei gefunden wird.Wenn App Engine keine
go.mod-Datei findet, wird derGOPATH-Modus ausgeführt.Wenn Sie die Umgebungsvariable
GO111MODULEfestlegen, achten Sie darauf, dass der Wert der Variablen denmodule-aware-Modus aktiviert. Wenn Sie Ihre Anwendung bereitstellen, prüft die App Engine Ihre Umgebung aufGO111MODULEund verhält sich entsprechend wie Go selbst. App Engine wendet die Einstellung der VariablenGO111MODULEnur an, wenn Sie einego.mod-Datei für Ihre Anwendung hinzugefügt haben.Bei Go 1.12 darf das Anwendungsverzeichnis nicht im Ordner
$GOPATH/srcliegen. Wenn sich Ihre Go 1.12-Anwendung in der Verzeichnisstruktur$GOPATH/srcbefindet, folgt App Engine demGOPATH-Modus, auch wenn Sie einego.mod-Datei für Ihre Anwendung definiert haben.Für Go 1.13 und höher verwendet App Engine standardmäßig den
module-aware-Modus, es sei dennGO111MODULEüberschreibt die Standardeinstellung oder einego.mod-Datei ist nicht im Anwendungsverzeichnis vorhanden.
Abhängigkeiten von Anbietern
Vendoring kopiert die von Ihrer Anwendung verwendeten Pakete in das Anwendungsverzeichnis, anstatt Module während des Build-Prozesses aus ihren Quellen herunterzuladen. Mit dem go build-Befehl werden die für Ihre Anwendung erforderlichen Pakete in einem Verzeichnis namens vendor im Stammverzeichnis Ihrer Anwendung gehostet.
Wenn das Stammverzeichnis Ihrer Anwendung in Go 1.14 und höher das Verzeichnis vendor enthält, verwenden der Befehl go build und der App Engine-Bereitstellungsprozess die Pakete im Anbieterverzeichnis anstatt die Module herunterzuladen.
In Go 1.13 und früheren Versionen ist das Anbieten nur verfügbar, wenn Sie Ihre Umgebung für die Verwendung des GOPATH-Modus eingerichtet haben.
Private Abhängigkeiten verwenden
App Engine kann die privaten Abhängigkeiten nicht während des Build-Prozesses herunterladen, daher müssen Sie diese bei der Bereitstellung in Ihren Anwendungscode einbinden.
Verwenden Sie die Anweisung replace in der Datei go.mod, um private Abhängigkeiten zu deklarieren. Im folgenden Beispiel wird davon ausgegangen, dass sich Ihre Anwendung im Verzeichnis /myapp/ befindet:
Rufen Sie das Anwendungsverzeichnis auf:
cd /myappErstellen Sie ein Verzeichnis mit den privaten Abhängigkeiten:
mkdir privateDie privaten Abhängigkeiten müssen sich im Verzeichnis
privatebefinden. Eine Möglichkeit ist die Erstellung eines Symlinks:mkdir private/private.example.com ln -s /path/to/private.example.com/foo private/private.example.com/fooAktualisieren Sie die Datei
go.mod, um die Anweisungreplacezur Verwendung des Verzeichnissesprivatefür die Abhängigkeiten zu verwenden:go mod edit -replace=private.example.com/foo=./private/private.example.com/fooIhre
go.mod-Datei sollte jetzt so aussehen:Finale
go.mod-Dateimodule private.example.com/myapp require private.example.com/foo v1.2.3 replace private.example.com/foo => ./private/private.example.com/fooOriginal
go.mod-Datei:module private.example.com/myapp require private.example.com/foo v1.2.3Ändern Sie nicht, wie Sie Ihr privates Paket importieren und verwenden. Ihre
import-Anweisung sollte so aussehen:import "private.example.com/foo"Schließen Sie die privaten Abhängigkeiten in die Bereitstellung ein, indem Sie Ihre Anwendung bereitstellen:
gcloud app deploy