„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie erstelle ich eine Kontextkopie in GO ohne Abbrechen -Ausbreitung?

Wie erstelle ich eine Kontextkopie in GO ohne Abbrechen -Ausbreitung?

Gepostet am 2025-03-23
Durchsuche:246

How to Create a Context Copy in Go Without Cancel Propagation?

Erstellen einer Kontextkopie ohne Abbrechen in Go

Wenn Sie mit Kontexten arbeiten, kann es entstehen, dass Sie eine Kopie eines vorhandenen Kontextes enthält, der dieselben Werte enthält, aber unabhängig von Krebs in Ankrankungen enthält. Dieses Szenario erfolgt beispielsweise, wenn Sie eine asynchrone Aufgabe ausführen möchten, nachdem Sie auf eine HTTP -Anfrage beantwortet werden, die den ursprünglichen Kontext überleben kann.

Der konventionelle Ansatz beinhaltet die manuelle Verfolgung aller möglichen Werte, die im Kontext gespeichert sind und einen neuen Kontext erstellen, um diese Werte zu kopieren. Eine einfachere und überschaubarere Lösung ist jedoch verfügbar.

go 1.21 hat die ohne Cancel -Funktion in das Kontextpaket eingeführt. Mit dieser Funktion können Sie einen neuen Kontext erstellen, der alle Werte aus dem ursprünglichen Kontext erbt, aber immun gegen seine Absage ist:

import "context"

// WithoutCancel returns a context that is never canceled.
func WithoutCancel(ctx context.Context) context.Context {
    return context.WithValue(context.Background(), context.NoCancel{}, struct{}{})
}

wickeln Sie Ihren ursprünglichen Kontext einfach wie folgt ein:

func Handler(ctx context.Context) (interface{}, error) {
    result := doStuff(ctx)
    newContext := context.WithoutCancel(ctx)
    go func() {
        doSomethingElse(newContext)
    }()
    return result
}

Jetzt wird die neue Goroutine mit einer Kopie des ursprünglichen Kontexts funktionieren, der nicht abgebrochen wird, wenn der ursprüngliche Kontext ist. Dies bietet die Flexibilität und Kontrolle, die für die Verwaltung der Lebensdauer asynchroner Aufgaben erforderlich ist.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3