Was ich für solche Fälle getan habe, in denen die Anwendung nur der Server ist und keine andere Funktion ausführt, ist die Installation http.HandleFunc
eines Musters wie /shutdown
. Etwas wie
http.HandleFunc("/shutdown", func(w http.ResponseWriter, r *http.Request) {
if <credentials check passes> {
// - Turn on mechanism to reject incoming requests.
// - Block until "in-flight" requests complete.
// - Release resources, both internal and external.
// - Perform all other cleanup procedures thought necessary
// for this to be called a "graceful shutdown".
fmt.Fprint(w, "Goodbye!\n")
os.Exit(0)
}
})
Es erfordert nicht 1.8. Aber wenn 1.8 verfügbar ist, kann diese Lösung hier eingebettet werden, anstatt den os.Exit(0)
Aufruf, falls gewünscht, glaube ich.
Der Code zur Durchführung all dieser Aufräumarbeiten bleibt dem Leser als Übung überlassen.
Zusätzliches Guthaben, wenn Sie sagen können, wo dieser Bereinigungscode am vernünftigsten platziert werden könnte, da ich dies hier nicht empfehlen würde und wie dieser Endpunktschlag den Aufruf dieses Codes verursachen sollte.
Mehr zusätzliche Gutschrift, wenn Sie sagen können, wo dieser os.exit(0)
Anruf (oder welcher Prozess-Exit, den Sie verwenden möchten), der hier nur zur Veranschaulichung angegeben wird, am vernünftigsten platziert wäre.
Noch mehr zusätzliche Anerkennung, wenn Sie erklären können, warum dieser Mechanismus der HTTP-Server-Prozesssignalisierung vor allen anderen Mechanismen in Betracht gezogen werden sollte, die in diesem Fall für praktikabel gehalten werden.