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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With