Heim >Backend-Entwicklung >Golang >Context.Background() vs. Context.TODO(): Wann sollten Sie welche 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:
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
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!