Anwendungen, die in der Go 1.12-Standardlaufzeit oder höher ausgeführt werden, können jedes mit Linux/amd64 kompatible Paket verwenden.
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.
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 modulesensitiven Modus verwendet:
Erstellen Sie die
go.mod
-Datei Ihres Moduls im gleichen Verzeichnis wie Ihreapp.yaml
-Datei. App Engine durchsucht das aktuelle Verzeichnis und anschließend die übergeordneten Verzeichnisse, bis einego.mod
-Datei gefunden wird.Wenn App Engine keine
go.mod
-Datei findet, wird der GOPATH-Modus ausgeführt.Wenn Sie die Umgebungsvariable
GO111MODULE
festlegen, achten Sie darauf, dass der Wert der Variablen den modulbasierten Modus aktiviert. Wenn Sie Ihre Anwendung bereitstellen, prüft die App Engine Ihre Umgebung aufGO111MODULE
und passt das Verhalten von Go selbst an. App Engine wendet die Einstellung der VariablenGO111MODULE
nur an, wenn Sie einego.mod
-Datei für Ihre Anwendung hinzugefügt haben.
Lokalisieren Sie in Go 1.12 Ihr Anwendungsverzeichnis nicht in oder unter
$GOPATH/src
. Wenn sich Ihre Go 1.12-Anwendung in der Verzeichnisstruktur$GOPATH/src
befindet, folgt App Engine dem GOPATH-Modus, auch wenn Sie einego.mod
-Datei für Ihre Anwendung definiert haben.Ab Go 1.13 verwendet App Engine standardmäßig den modulbasierten Modus, es sei denn
GO111MODULE
überschreibt die Standardeinstellung oder es ist keinego.mod
-Datei 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 das Verzeichnis vendor
enthält, verwendet der Befehl go build
(und somit der App Engine-Bereitstellungsprozess) die Pakete im Anbieterverzeichnis, anstatt 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.
Sie müssen die Anweisung replace
in der Datei go.mod
verwenden, 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 /myapp
Erstellen Sie ein Verzeichnis mit den privaten Abhängigkeiten:
mkdir private
Die privaten Abhängigkeiten müssen sich im Verzeichnis
private
befinden. 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/foo
Aktualisieren Sie die Datei
go.mod
, um die Anweisungreplace
zur Verwendung des Verzeichnissesprivate
für die Abhängigkeiten zu verwenden:go mod edit -replace=private.example.com/foo=./private/private.example.com/foo
Ihre
go.mod
-Datei sollte jetzt wie folgt 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/foo
Original
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 wie folgt 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