Heim >häufiges Problem >Was ist ctx in Golang?
ctx in Golang ist die Abkürzung für Context, ein Typ in der Standardbibliothek, der zum Übertragen von Metadaten wie anforderungsbereichsspezifischen Werten, Abbruchsignalen und Fristen zwischen „Goroutinen“ verwendet wird.
Das Betriebssystem dieses Tutorials: Windows 10-System, Go1.20.1-Version, Dell G3-Computer.
In Golang ist ctx die Abkürzung für Context, ein Typ in der Standardbibliothek. Der
Context-Typ wird verwendet, um Metadaten wie anforderungsbereichsspezifische Werte, Abbruchsignale und Fristen zwischen Goroutinen zu übergeben. Beim Erstellen einer Anfrage kann ein Root-Kontext erstellt und in der gesamten Anwendung an die Aufrufkette übergeben werden. Während sich Anfragen verbreiten, kann dieser Kontext von anderen Goroutinen kopiert und für die zugrunde liegende Kommunikation verwendet werden.
Die Hauptfunktionen von ctx sind:
Übertragen von Metadaten: In der Netzwerkaufrufkette der HTTP-Anforderung müssen einige Metadateninformationen (z. B. Benutzerautorisierungstoken) übergeben und dabei verwendet werden. ctx ist die bevorzugte Methode dieses Szenario umsetzen.
Timeout und Abbruch des Kontrollflusses: In verschachtelten Aufrufketten mit mehreren Ebenen müssen Fehler häufig jede Ebene von Aufrufketten durchbrechen. In einigen Fällen muss Goroutine sogar gleichzeitig abgebrochen werden Methode zur Lösung solcher Probleme.
Das Folgende ist ein einfacher Beispielcode, der veranschaulicht, wie ctx verwendet wird, um den Abbruch und das Timeout von Goroutine zu steuern.
func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() // 常用结合 defer 安排执行 go doSomething(ctx) time.Sleep(10 * time.Second) } func doSomething(ctx context.Context) { select { case <-time.After(time.Hour): fmt.Println("do something") case <-ctx.Done(): fmt.Println("canceled by user:", ctx.Err()) } }
Im Beispielcode wird ein Kontext mit „context.WithCancel“ erstellt und trägt die Abbruchfunktion („cancel()“) und übergibt sie dann an die Funktion „doSomething“. In „doSomething“ werden 2 der Kanäle durch „select“ überwacht. Wenn 10 Sekunden vergehen, führt die Haupt-Goroutine die „Abbrechen“-Funktion aus und sendet dadurch ein Done-Signal an „ctx“, was dazu führt, dass die Goroutine von „doSomething“ empfängt dieses Signal und
Das obige ist der detaillierte Inhalt vonWas ist ctx in Golang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!