Abhängigkeiten angeben

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 zum Verwalten von Abhängigkeiten in Ihrer Go-Anwendung. Sie können weiterhin den älteren Modus GOPATH verwenden, wenn Sie noch nicht für die Migration zu Go-Modulen bereit sind.

Ab Go Version 1.22:

  • Sie können go get nicht außerhalb eines Moduls im Legacy-Modus GOPATH (GO111MODULE=off) verwenden. Weitere Informationen finden Sie unter Tools.

  • Go empfiehlt die Verwendung einer go.mod-Datei zum Verwalten von Abhängigkeiten. Fügen Sie die Datei go.mod in denselben Ordner wie die Datei app.yaml ein, um Abhängigkeiten während der Bereitstellung zu installieren. Weitere Informationen zu Go-Versionen und zum Verwalten von Abhängigkeiten für Anbieterverzeichnisse finden Sie unter GOPATH und 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 Modus module-aware verwendet:

  • Erstellen Sie die go.mod-Datei Ihres Moduls im gleichen Verzeichnis wie Ihre app.yaml-Datei. App Engine durchsucht das aktuelle Verzeichnis und die nachfolgenden übergeordneten Verzeichnisse, bis eine go.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 Modus module-aware aktiviert. Wenn Sie Ihre Anwendung bereitstellen, prüft die App Engine Ihre Umgebung auf GO111MODULE und verhält sich entsprechend wie Go selbst. App Engine wendet die Einstellung der Variablen GO111MODULE nur an, wenn Sie eine go.mod-Datei für Ihre Anwendung hinzugefügt haben.

  • Suchen Sie für Go 1.12 Ihr Anwendungsverzeichnis nicht im Ordner $GOPATH/src. Wenn sich Ihre Go 1.12-Anwendung in der Verzeichnisstruktur $GOPATH/src befindet, folgt App Engine dem GOPATH-Modus, auch wenn Sie eine go.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 denn GO111MODULE überschreibt die Standardeinstellung oder eine go.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 die Abhängigkeiten bei der Bereitstellung in Ihren Anwendungscode einbinden.

Verwenden Sie die Anweisung replace in Ihrer go.mod-Datei, um private Abhängigkeiten zu deklarieren. Im folgenden Beispiel wird davon ausgegangen, dass sich Ihre Anwendung im Verzeichnis /myapp/ befindet:

  1. Rufen Sie das Anwendungsverzeichnis auf:

    cd /myapp
    
  2. 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
    
  3. Aktualisieren Sie die Datei go.mod, um die Anweisung replace zur Verwendung des Verzeichnisses private 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-Datei

    module 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
    
  4. Ändern Sie die Art und Weise, wie Sie das private Paket importieren und verwenden. Ihre import - Anweisung sollte so aussehen:

    import "private.example.com/foo"
    
  5. Schließen Sie die privaten Abhängigkeiten in die Bereitstellung ein, indem Sie Ihre Anwendung bereitstellen:

    gcloud app deploy