To, co zrobiłem w takich przypadkach, gdy aplikacja jest tylko serwerem i nie wykonuje żadnej innej funkcji, to zainstalowanie http.HandleFunc
wzorca takiego jak /shutdown
. Coś jak
http.HandleFunc("/shutdown", func(w http.ResponseWriter, r *http.Request) {
if <credentials check passes> {
fmt.Fprint(w, "Goodbye!\n")
os.Exit(0)
}
})
Nie wymaga 1.8. Ale jeśli jest dostępna wersja 1.8, to os.Exit(0)
moim zdaniem to rozwiązanie można osadzić tutaj zamiast wywołania, jeśli jest to pożądane.
Kod do wykonania wszystkich prac porządkowych pozostawiamy jako ćwiczenie dla czytelnika.
Dodatkowy kredyt, jeśli możesz powiedzieć, gdzie ten kod czyszczący może być najbardziej racjonalnie umieszczony, ponieważ nie polecałbym tego robić w tym miejscu i jak to trafienie w punkt końcowy powinno spowodować wywołanie tego kodu.
Więcej dodatkowych punktów, jeśli możesz powiedzieć, gdzie to os.exit(0)
wywołanie (lub jakiekolwiek wyjście z procesu, którego zdecydujesz się użyć), podane tutaj tylko w celach ilustracyjnych, byłoby najbardziej uzasadnione.
Jeszcze większy zasługa, jeśli potrafisz wyjaśnić, dlaczego ten mechanizm sygnalizacji procesu serwera HTTP powinien być wzięty pod uwagę ponad wszystkie inne tego typu mechanizmy, które są w tym przypadku możliwe.