Goroutine execution inside an http handler

Issue

If I start a goroutine inside an http handler, is it going to complete even after returning the response ? Here is an example code:

package main

import (
    "fmt"
    "net/http"
    "time"
)

func worker() {
    fmt.Println("worker started")
    time.Sleep(time.Second * 10)
    fmt.Println("worker completed")
}

func HomeHandler(w http.ResponseWriter, r *http.Request) {
    go worker()
    w.Write([]byte("Hello, World!"))
}

func main() {
    http.HandleFunc("/home", HomeHandler)
    http.ListenAndServe(":8081", nil)
}

In the above example, is that worker goroutine going to complete in all situations ? Or is there any special case when it is not going to complete?

Solution

Yes, it will complete, there’s nothing stopping it.

The only thing that stops goroutines to finish “from the outside” is returning from the main() function (which also means finishing the execution of your program, but this never happens in your case). And other circumstances which lead to unstable states like running out of memory.

Answered By – icza

Answer Checked By – Gilberto Lyons (GoLangFix Admin)

Leave a Reply

Your email address will not be published.