Beim Ausführen einer Goroutine innerhalb eines HTTP-Handlers fragt man sich natürlich, ob ihre Ausführung fortgesetzt wird, nachdem die Antwort zurückgegeben wurde. Betrachten Sie den folgenden Beispielcode:
package main import ( "fmt" "net/http" "time" ) func worker() { fmt.Println("worker started") time.Sleep(time.Second * 10) fmt.Println("worker completed") } func HomeHandler(w http.ResponseWriter, r *http.Request) { go worker() w.Write([]byte("Hello, World!")) } func main() { http.HandleFunc("/home", HomeHandler) http.ListenAndServe(":8081", nil) }
Dieser Code startet eine Goroutine innerhalb des HomeHandlers, die 10 Sekunden lang schläft, bevor der Druckvorgang abgeschlossen ist. Sobald die Antwort geschrieben ist, kehrt die Haupt-Goroutine von der HomeHandler-Funktion zurück.
In diesem speziellen Szenario wird die Goroutine ihre Ausführung tatsächlich abschließen und die Anweisungen „worker „gestartet“ und „Worker abgeschlossen“ an die Konsole übertragen. Dies liegt daran:
Die einzige Möglichkeit, die Goroutine in diesem Fall vorzeitig zu beenden, wäre, auf einen instabilen Zustand zu stoßen, z. B. beim Ausführen Nicht genügend Arbeitsspeicher vorhanden ist oder die Goroutine mithilfe von Synchronisierungstechniken explizit gestoppt werden soll (wird in diesem Codebeispiel nicht behandelt).
Das obige ist der detaillierte Inhalt vonWird meine Goroutine beendet, nachdem die HTTP-Antwort gesendet wurde?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!