Те, що я робив для таких випадків, коли програма є лише сервером і не виконує жодної іншої функції, - це встановити http.HandleFuncдля такого шаблону, як /shutdown. Щось на зразок
http.HandleFunc("/shutdown", func(w http.ResponseWriter, r *http.Request) {
if <credentials check passes> {
fmt.Fprint(w, "Goodbye!\n")
os.Exit(0)
}
})
Для цього не потрібно 1.8. Але якщо доступний 1.8, то os.Exit(0), на мою думку , це рішення може бути вбудовано сюди замість виклику, якщо це бажано.
Код для виконання всієї цієї роботи з очищення залишається вправою для читача.
Додатковий кредит, якщо ви можете сказати, де цей код очищення може бути найбільш розумно розміщений, оскільки я б не рекомендував робити це тут, і як це звернення до кінцевої точки повинно викликати цей код.
Більше додаткового кредиту, якщо ви можете сказати, де цей os.exit(0)дзвінок (або будь-який вихід із процесу, який ви вирішите використовувати), наведений тут лише для ілюстративних цілей, буде найбільш розумно розміщений.
І все-таки ще більше додаткового кредиту, якщо ви можете пояснити, чому цей механізм сигналізації процесу HTTP-сервера слід розглядати перш за все інші такі механізми, які вважаються працездатними у цьому випадку.