Heim > Backend-Entwicklung > Golang > Wie rufe ich Rückgabewerte von asynchron ausgeführten Goroutinen in Go ab?

Wie rufe ich Rückgabewerte von asynchron ausgeführten Goroutinen in Go ab?

Mary-Kate Olsen
Freigeben: 2024-12-26 01:03:11
Original
269 Leute haben es durchsucht

How Do I Retrieve Return Values from Asynchronously Running Goroutines in Go?

Rückgabewerte von Goroutinen abfangen

Im Gegensatz zu herkömmlichen Funktionsaufrufen werden Goroutinen asynchron ausgeführt. Daher führt der Versuch, den Rückgabewert einer Goroutine direkt in einer Variablen zu speichern, wie im Codeausschnitt zu sehen ist, zu einem Kompilierungsfehler.

Grund für den Fehler

Der Fehler ist auf die widersprüchliche Natur der asynchronen Ausführung und des sofortigen Wertabrufs zurückzuführen. Wenn Sie eine Goroutine mit go verwenden, weisen Sie das Programm an, die Funktion asynchron auszuführen, ohne auf ihren Abschluss zu warten. Um den Rückgabewert einer Variablen zuzuweisen, muss der Wert jedoch sofort verfügbar sein.

Kanäle: Ein asynchroner Wertübergabemechanismus

Um diese Einschränkung zu umgehen, dienen Kanäle als Vermittler für den Werteaustausch zwischen Goroutinen. Mit Kanälen können Sie Werte von einer Goroutine an eine andere senden und so einen asynchronen Werteabruf ermöglichen, ohne die Parallelität zu unterbrechen.

Durch die Implementierung eines kanalbasierten Ansatzes, wie im folgenden Code veranschaulicht, können Sie Werte von Goroutinen empfangen, ohne deren Beeinträchtigung zu beeinträchtigen asynchrone Natur:

func main() {
    c1 := make(chan string)
    c2 := make(chan string)

    go func() {
        time.Sleep(time.Second * 1)
        c1 <- "one"
    }()
    go func() {
        time.Sleep(time.Second * 2)
        c2 <- "two"
    }()

    for i := 0; i < 2; i++ {
        // Receive values from both channels concurrently
        select {
        case msg1 := <-c1:
            fmt.Println("received", msg1)
        case msg2 := <-c2:
            fmt.Println("received", msg2)
        }
    }
}
Nach dem Login kopieren

Message-Passing und CSP Theorie

Das Nachrichtensystem von Go ist von der CSP-Theorie (Communicating Sequential Processes) inspiriert. Dieser Ansatz fördert die Nachrichtenübermittlung als primären Kommunikationsmechanismus zwischen unabhängigen Prozessen. Der Beispielcode folgt den CSP-Prinzipien, indem er Kanäle für die asynchrone Kommunikation zwischen Goroutinen nutzt.

Das obige ist der detaillierte Inhalt vonWie rufe ich Rückgabewerte von asynchron ausgeführten Goroutinen in Go ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage