Abhängigkeiten in Go angeben

Alle Abhängigkeiten von Cloud Functions in Go müssen über Go-Module mit einer go.mod-Datei oder über ein vendor-Verzeichnis bereitgestellt werden. Die Abhängigkeiten Ihrer Funktion können nicht gleichzeitig mit Go-Modulen und einem vendor-Verzeichnis angegeben werden.

Die Go-Laufzeit enthält eine Reihe von Systempaketen in der Ausführungsumgebung. Wenn die Funktion eine Abhängigkeit verwendet, für die ein nicht aufgeführtes Paket erforderlich ist, können Sie ein Paket anfordern.

Der Inhalt dieses Dokuments gilt sowohl für Go 1.11 als auch für Go 1.13.

Go-Module verwenden

Cloud Functions unterstützt die experimentelle Modulfunktionalität von Go, mit der Sie Abhängigkeiten in einer go.mod-Datei im Stammverzeichnis Ihres Projekts angeben können. Wenn Sie Ihre Funktion bereitstellen, werden die in der go.mod-Datei angegebenen Abhängigkeiten automatisch abgerufen und erstellt.

Das Verhalten von Go-Modulen hängt davon ab, ob Sie die Entwicklung innerhalb oder außerhalb von GOPATH durchführen. So finden Sie heraus, ob Sie sich in GOPATH befinden:

  1. Rufen Sie das Projektverzeichnis auf.

  2. Führen Sie den folgenden Befehl aus, um nach GOPATH zu suchen:

    go env GOPATH
    

    Die Ausgabezeile sollte in etwa so aussehen:

    GOPATH=YOUR_GOPATH
    
  3. Führen Sie Folgendes aus, um Ihr aktuelles Arbeitsverzeichnis aufzurufen:

    pwd
    

Wenn Ihr Arbeitsverzeichnis mit YOUR_GOPATH beginnt, befinden Sie sich im GOPATH. Generieren Sie in diesem Fall Ihre go.mod-Datei durch Ausführen der folgenden drei Befehle:

export GO111MODULE=on
go mod init
go mod tidy

Wenn Ihr Arbeitsverzeichnis nicht mit YOUR_GOPATH beginnt, befinden Sie sich außerhalb des GOPATH. Generieren Sie in diesem Fall Ihre go.mod-Datei durch Ausführen der folgenden Befehle:

go mod init MODULE
go mod tidy

Im obigen Beispiel ist MODULE der Name Ihres Moduls. Ihr Modulname könnte zum Beispiel example.com/myproject lauten. Beachten Sie, dass der Domainname erforderlich ist. Der go-Befehl erkennt den Modulnamen automatisch, wenn Sie sich im GOPATH befinden.

Nachdem Sie eine go.mod-Datei erstellt haben, können Sie den Befehl go get verwenden, um Abhängigkeiten abzurufen und sie automatisch in Ihr Projekt einzufügen. Beispiel:

go get DEPENDENCY

Im obigen Beispiel ist DEPENDENCY eine Abhängigkeit, die Sie der Funktion hinzufügen möchten. Der Befehl go get cloud.google.com/go/storage fügt beispielsweise die Cloud Storage-Clientbibliothek in Ihre Funktion ein.

vendor-Verzeichnis verwenden

Sie können Abhängigkeiten in Cloud Functions auch über ein vendor-Verzeichnis angeben. Normalerweise werden vendor-Verzeichnisse mit einem Abhängigkeitsmanager verwaltet. Sie können einen beliebigen Abhängigkeitsmanager verwenden. So können Sie beispielsweise über die Funktionalität der Go-Module aus Ihrer go.mod-Datei ein vendor-Verzeichnis erstellen.

Wenn Ihre Abhängigkeit nicht über einen Abhängigkeitsmanager verfügbar ist oder der Internetzugriff Ihrer Cloud Functions-Umgebung eingeschränkt ist, erweist sich die Verwendung eines vendor-Verzeichnisses als hilfreich.

Wenn Sie eine go.mod-Datei und ein vendor-Verzeichnis haben, wird das vendor-Verzeichnis beim Bereitstellen der Funktion ignoriert. Sie können eine .gcloudignore-Datei verwenden, um das Hochladen der Dateien go.mod und go.sum zu vermeiden. In diesem Fall werden die Inhalte Ihres vendor-Verzeichnisses berücksichtigt:

  1. Erstellen Sie im Stammverzeichnis Ihres Projektverzeichnisses eine .gcloudignore-Datei mit folgendem Inhalt:

    go.mod
    go.sum
    
    # Also ignore Git directories. Delete the following two lines if you want to
    # upload them.
    .git
    .gitignore
    
  2. Erstellen Sie mithilfe des Inhalts Ihrer go.mod-Datei ein Verzeichnis vendor durch Ausführen des folgenden Befehls:

    go mod vendor
    

Private Abhängigkeiten verwenden

Wenn die Abhängigkeiten Ihrer Funktion in einem nicht öffentlich zugänglichen Repository gehostet werden, müssen Sie ein vendor-Verzeichnis verwenden, um Ihre Abhängigkeiten vor der Bereitstellung der Funktion abzurufen. Wenn Sie vorhaben, eine go.mod-Datei zu verwenden, sollten Sie die obigen Hinweise beachten, um Konflikte zwischen der go.mod-Datei und dem vendor-Verzeichnis zu vermeiden.