Heim  >  Artikel  >  Was ist ctx in Golang?

Was ist ctx in Golang?

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌Original
2023-06-09 14:34:082722Durchsuche

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.

Was ist ctx in Golang?

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!

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