Go-Laufzeit
Cloud Functions unterstützt diese Go-Laufzeiten:
- Go 1.19 (empfohlen)
- Go 1.20 (Vorschau)
- Go 1.18
- Go 1.16
- Go 1.13
- Go 1.11 (verworfen)
Informationen zur Vorbereitung eines lokalen Computers für die Entwicklung mit Go finden Sie unter Go-Entwicklungsumgebung einrichten.
Informationen zu den ersten Schritten mit Go in Cloud Functions finden Sie in der Schnellstartanleitung.
Laufzeit auswählen
Sie können die Go-Laufzeit für Ihre Funktion während der Bereitstellung auswählen.
gcloud
Wenn Sie die Google Cloud CLI verwenden, können Sie die Laufzeit mit dem Parameter --runtime
mit der Go-Laufzeit Ihrer Wahl angeben.
Beispiele:
gcloud functions deploy FUNCTION_NAME --runtime go119 FLAGS...
FLAGS...
bezieht sich auf Argumente, die bei der erstmaligen Bereitstellung der Funktion übergeben wurden. Weitere Informationen zu erforderlichen und optionalen Argumenten finden Sie unter gcloud-Tool zum Bereitstellen verwenden.
Console
Wenn Sie die Google Cloud Console verwenden, können Sie beim Erstellen und Bereitstellen einer Funktion die Laufzeit auswählen. Eine ausführliche Anleitung finden Sie in der Google Cloud Console-Kurzanleitung.
Ausführungsumgebung
Die Ausführungsumgebung enthält die Laufzeit, das Betriebssystem, Pakete und eine Bibliothek, die Ihre Funktion aufruft.
Die Laufzeiten Go 1.13 und Go 1.16 verwenden eine auf Ubuntu 18.04 basierende Ausführungsumgebung. Die Laufzeiten Go 1.18, Go 1.19 und Go 1.20 verwenden eine auf Ubuntu 22.04 basierende Ausführungsumgebung. Weitere Informationen finden Sie unter Ausführungsumgebung von Cloud Functions.
Struktur des Quellcodes
Damit Cloud Functions die Definition Ihrer Funktion findet, hat jede Laufzeit bestimmte Strukturanforderungen für Ihren Quellcode. Weitere Informationen finden Sie unter Cloud Functions-Funktionen schreiben.
Abhängigkeiten 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. Weitere Informationen finden Sie unter Abhängigkeiten in Go angeben.
Umgebungsvariablen
Mit Go 1.13+-Laufzeiten werden automatisch weniger Umgebungsvariablen festgelegt als die von Cloud Functions unterstützten vorherigen Laufzeiten. Weitere Informationen finden Sie unter Umgebungsvariablen verwenden.
Einmalige Initialisierung
Ihre Funktionen müssen möglicherweise eine einmalige Initialisierung durchlaufen, z. B. zum Erstellen von API-Clients und zum Konfigurieren des Datenbankzugriffs. Dazu haben Sie verschiedene Möglichkeiten:
Verwenden Sie die Funktion
func init()
zum Initialisieren von Werten, wenn eine neue Instanz der Funktion gestartet wird. Der Code in der Funktionfunc init()
wird ausgeführt, bevor die Funktion die erste Anfrage erhält.Verwenden Sie die Funktion
sync.Once.Do()
, um Code einmal pro Cloud Functions-Instanz auszuführen. Dies ist nützlich, wenn die Initialisierung nur bei Bedarf ausgeführt werden soll und nicht beim ersten Start Ihrer Funktionsinstanz. Sie müssen zum Beispiel einen Datenbankclient nur unter bestimmten Umständen initialisieren.
context.Context
Mit dem context
-Paket von Go wird der Context
-Typ definiert, der Fristen, Abbruchsignale und andere auf Anfragen bezogene Werte über API-Grenzen hinweg und zwischen Prozessen überträgt.
API-Clients, die einen bestimmten Funktionsaufruf überdauern, sollten mit einem globalen context.Context
-Wert initialisiert werden, z. B. einem, der mit der Funktion context.Background()
erstellt wurde.
Zur Leistungsoptimierung können Sie einen Client im globalen Bereich initialisieren. Dieser Client und sein Kontext bleiben möglicherweise für die gesamte Lebensdauer einer Funktionsinstanz bestehen.
Sie sollten den Kontext des Funktionsaufrufs nur für Objekte oder Vorgänge einsetzen, die in die Lebensdauer eines bestimmten Funktionsaufrufs fallen.
Der Aufrufkontext kann zu einem beliebigen Zeitpunkt nach dem Ende der Funktionsausführung abgebrochen werden. Das bedeutet, dass alle initialisierten Clients, die diesen Kontext verwenden, geschlossen werden können. Der Kontext des Funktionsaufrufs kann über die Argumente der Funktion aufgerufen werden: normalerweise ist dies r.Context()
für HTTP-Funktionen und ctx
für Hintergrundfunktionen.
Im folgenden Codebeispiel wird ein Pub/Sub-Client verwendet:
Go 1.16
Go 1.16 führt Änderungen im Abhängigkeitsmanagement ein. Der wichtigste Modus ist jetzt der modulbasierte Modus. Das heißt, der Quellcode muss eine go.mod
-Datei enthalten. Die vollständigen Versionshinweise finden Sie unter golang.org.
So unterstützen Sie vorhandene Bereitstellungen in Versionen älter als 1.16 und vereinfachen den Migrationspfad:
- Funktionen ohne
go.mod
werden weiterhin unterstützt. - Funktionen mit
vendor
und ohnego.mod
funktionieren wie zuvor für Versionen vor 1.16. Cloud Functions fügt das Functions Framework hinzu, wenn es sich nicht invendor
befindet. - Funktionen mit
vendor
undgo.mod
werden für Go 1.14 und höher unterstützt, müssen aber das Functions Framework ingo.mod
/vendor
haben. Andernfalls schlägt der Build mit folgendem Fehler fehl:
vendored dependencies must include "github.com/GoogleCloudPlatform/functions-framework-go";
if your function does not depend on the module, please add a blank import:
`_ "github.com/GoogleCloudPlatform/functions-framework-go"`
Weitere Informationen zur Verwendung des Verzeichnisses vendor
für Ihre jeweilige Go-Version.