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.

Reply via email to