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:
Rufen Sie das Projektverzeichnis auf.
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
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.
Nachdem Sie das Verzeichnis vendor
eingerichtet haben, müssen Sie möglicherweise je nach verwendeter Go-Version zusätzliche Schritte ausführen, um sicherzustellen, dass dessen Inhalt berücksichtigt wird:
Go-Version 1.16 oder höher
Wenn Sie Go 1.16 oder höher verwenden, können Sie das Verzeichnis vendor
unverändert beibehalten. Wenn das Hauptmodul ein vendor
-Verzeichnis der obersten Ebene enthält und in seiner go.mod
-Datei Go 1.16 oder höher angegeben ist, nimmt der go
-Befehl bei Vorgängen, die dieses Flag akzeptieren, standardmäßig -mod=vendor
.
Go-Version älter als 1.16
Wenn Sie eine Version von Go älter als 1.16 verwenden, müssen Sie Folgendes tun, damit der Inhalt des Verzeichnisses vendor
berücksichtigt wird.
Bei Versionen von Go vor Version 1.16 wird das Verzeichnis vendor
ignoriert, wenn Sie eine go.mod
-Datei und ein vendor
-Verzeichnis haben.
Sie können eine .gcloudignore
-Datei verwenden, um das Hochladen der Dateien go.mod
und go.sum
zu vermeiden:
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
Erstellen Sie mithilfe des Inhalts Ihrer
go.mod
-Datei ein Verzeichnisvendor
durch Ausführen des folgenden Befehls:go mod vendor
Wenn Sie die Google Cloud CLI zum Bereitstellen der Funktion verwenden, können Sie mithilfe von .gcloudignore
dafür sorgen, dass go.mod
nicht hochgeladen wird.
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 potenzielle Konflikte zwischen der go.mod
-Datei und dem vendor
-Verzeichnis zu vermeiden.