Bei der Beantwortung von HTTP-Anfragen müssen Sie die Nutzlast möglicherweise im Hintergrund verarbeiten während mit einer nicht blockierenden Antwort geantwortet wird. Dies kann erreicht werden, indem die Anfrage geschlossen und eine Goroutine gestartet wird, um die Verarbeitung fortzusetzen.
Im bereitgestellten Codebeispiel setzen Sie den Statuscode auf 202 Akzeptiert, um dies anzuzeigen Die Anfrage wird zur Hintergrundverarbeitung angenommen. Um die Anfrage ordnungsgemäß zu schließen, können Sie einfach den Header schreiben und die Goroutine starten, wie unten gezeigt:
<code class="go">func index(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusAccepted) go sleep() }</code>
Einige Entwickler empfehlen, nach dem Schreiben vom Request-Handler zurückzukehren den Header und das Starten der Goroutine. Dies ist jedoch nicht notwendig und kann auch weggelassen werden. Die Rückkehr vom Handler signalisiert automatisch den Abschluss der Anfrage und gibt die ihr zugewiesenen Ressourcen frei.
Wenn Sie beabsichtigen, einen 200 OK-Statuscode zurückzugeben, können Sie einfach den Ruhezustand aufrufen Funktion ohne Setzen des Statuscodes. Wenn keine Header festgelegt sind, wird vom Server automatisch 200 OK gesetzt.
Die beste Vorgehensweise zum Schließen einer Anfrage für die Hintergrundverarbeitung besteht darin, den Header zu schreiben und die Goroutine zu starten. wie im folgenden Code gezeigt:
<code class="go">func index(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusAccepted) go sleep() }</code>
Denken Sie daran, die Verwendung der http.ResponseWriter- oder httpRequest-Werte in der gleichzeitigen Goroutine nach der Rückkehr vom Handler zu vermeiden, da diese möglicherweise vom Server wiederverwendet werden.
Das obige ist der detaillierte Inhalt vonWie schließe ich eine HTTP-Anfrage für die Hintergrundverarbeitung in Go ordnungsgemäß?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!