Heim >Backend-Entwicklung >Golang >Context.Background() vs. Context.TODO(): Wann sollten Sie welche verwenden?

Context.Background() vs. Context.TODO(): Wann sollten Sie welche verwenden?

Susan Sarandon
Susan SarandonOriginal
2024-11-07 18:18:03473Durchsuche

Context.Background() vs Context.TODO(): When Should You Use Which?

Background() vs TODO(): Welchen Kontext sollten Sie verwenden?

Wenn Sie Code von einem globalen Sign-Paket zum Go-Mongo-Treiber migrieren, verstehen Sie das entsprechende Die Verwendung von context.TODO() und context.Background() ist von entscheidender Bedeutung.

Background()

Gemäß der Dokumentation gibt context.Background() ein Non zurück -nil, leer Kontext mit den folgenden Merkmalen:

  • Nie storniert
  • Keine Werte
  • Keine Frist

Wird häufig verwendet in der Hauptfunktion, Initialisierung und Tests. Wenn kein sinnvoller Kontext verfügbar ist, bietet context.Background() einen Fallback.

TODO()

context.TODO() gibt auch einen leeren Wert ungleich Null zurück Kontext. Der beabsichtigte Einsatz liegt jedoch insbesondere dann, wenn unklar ist, welcher Kontext verwendet werden soll, oder wenn ein Kontext noch nicht verfügbar ist. Durch die Verwendung von context.TODO() können Sie explizit dokumentieren, dass Sie einen Kontext benötigen, derzeit aber keinen bestimmten haben.

Best Practices

  • Verwenden Sie lieber den Kontext, der Ihrer HTTP-Anfrage oder anderen anwendungsspezifischen Szenarien zugeordnet ist.
  • Verwenden Sie context.TODO() in Situationen, in denen kein klarer Kontext verfügbar ist, Sie aber dennoch angeben müssen, dass ein Kontext erforderlich ist.
  • Vermeiden Sie die Verwendung von context.Background() außerhalb von Haupt-, Initialisierungs- oder Testfunktionen.

Beispielverwendung

Betrachten Sie das folgende Szenario, in dem Ein HTTP-Handler muss eine MongoDB-Abfrage innerhalb eines bestimmten Zeitlimits ausführen:

ctx, cancel := context.WithTimeout(r.Context(), 6 * time.Second)
defer cancel()

// ctx automatically times out after 6 seconds
curs, err := c.Find(ctx, bson.M{"some": "filter"})

In diesem Beispiel erstellt context.WithTimeout() einen neuen Kontext, der aus dem Anforderungskontext (r.Context()) abgeleitet wird. . Wenn der MongoDB-Vorgang 6 Sekunden überschreitet, läuft der Kontext ab und signalisiert, dass die Abfrage abgebrochen werden sollte.

Fazit

Wahl zwischen context.TODO() und context. Bei Background() geht es darum, die spezifischen Nutzungsszenarien zu verstehen und sicherzustellen, dass Sie den nachgelagerten Funktionen einen sinnvollen und angemessenen Kontext bereitstellen.

Das obige ist der detaillierte Inhalt vonContext.Background() vs. Context.TODO(): Wann sollten Sie welche verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn