Try a channel to wait for shutdown in main. func main() { srv := &http.Server{Addr: ":8080", Handler: http.DefaultServeMux} * done := make(chan struct{})*
http.Handle("/web/", http.FileServer(http.Dir("./"))) http.HandleFunc("/stop", func(w http.ResponseWriter, r *http.Request) { log.Println("Server shutting down...") fmt.Println("test - before shutdown") err := srv.Shutdown(context.Background()) fmt.Println("test - after shutdown") log.Println("Error: %v", err) * close(done)* }) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { log.Println("Got request") time.Sleep(6000 * time.Millisecond) fmt.Fprintf(w, "Hello @ %s", time.Now()) log.Println("Finished request") }) log.Println("Server starting up...") if err := srv.ListenAndServe(); err != http.ErrServerClosed { log.Fatalf("Server startup failed! Error: %v", err) } * <-done* } On Sun, Jul 9, 2017 at 5:45 AM <charli...@gmail.com> wrote: > Just tried it but it doesn't work. > > The problem I started from is that server.Shutdown didn't wait for my > requests to complete. (To check this I put in the time.Sleep(6000 * > time.Millisecond)). When I narrowed down the problem it showed me that > code after the Shutdown call wasn't being executed. And now putting a > time.Sleep() in the main didn't help either... > > > On Sunday, July 9, 2017 at 10:13:49 PM UTC+10, Elias Naur wrote: >> >> Your main goroutine probably exits before the handler gets to write >> "after shutdown" to the console. Try adding a time.Sleep(1*time.Second) as >> the very last line in main(). >> >> - elias >> >> On Sunday, July 9, 2017 at 1:53:36 PM UTC+2, char...@gmail.com wrote: >>> >>> Hi, >>> >>> Go code after calling srv.Shutdown() simply isn't called. There is no >>> error message, no dump, nothing. This is the output after visiting >>> http://localhost:8080/stop on my browser >>> >>> 2017/07/09 13:58:40 Server starting up... >>> 2017/07/09 13:58:44 Server shutting down... >>> test - before shutdown >>> >>> Notice that "test - after shutdown" doesn't show up. What am I doing >>> wrong? >>> >>> func main() { >>> srv := &http.Server{Addr: ":8080", Handler: http.DefaultServeMux} >>> >>> http.Handle("/web/", http.FileServer(http.Dir("./"))) >>> http.HandleFunc("/stop", func(w http.ResponseWriter, r >>> *http.Request) { >>> log.Println("Server shutting down...") >>> fmt.Println("test - before shutdown") >>> err := srv.Shutdown(context.Background()) >>> fmt.Println("test - after shutdown") >>> log.Println("Error: %v", err) >>> }) >>> http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { >>> log.Println("Got request") >>> time.Sleep(6000 * time.Millisecond) >>> fmt.Fprintf(w, "Hello @ %s", time.Now()) >>> log.Println("Finished request") >>> }) >>> >>> log.Println("Server starting up...") >>> if err := srv.ListenAndServe(); err != http.ErrServerClosed { >>> log.Fatalf("Server startup failed! Error: %v", err) >>> } >>> } >>> >>> >>> -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.