func main() { // Make shutdown catch Ctrl+c and system terminate shutdown.OnSignal(0, os.Interrupt, syscall.SIGTERM) // In the first stage we will make sure all request have finished shutdown.FirstFunc(func(interface{}) { log.Println("Notify upstream we are going offline") // TODO: Send a request upstream }, nil) // Start a service go dataLoop() // Start a webserver http.HandleFunc("/", HelloServer) log.Fatal(http.ListenAndServe(":8080", nil)) }
func main() { // Make shutdown catch Ctrl+c and system terminate shutdown.OnSignal(0, os.Interrupt, syscall.SIGTERM) // Create a log file var logFile *os.File logFile, _ = os.Create("log.txt") // When shutdown is initiated, close the file shutdown.FirstFunc(closeFile, logFile) // Start a webserver http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { // Get a lock, and write to the file if we get it. // While we have the lock the file will not be closed. if shutdown.Lock() { _, _ = logFile.WriteString(req.URL.String() + "\n") shutdown.Unlock() } }) log.Fatal(http.ListenAndServe(":8080", nil)) }