Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Goroutine execution inside an http handler

Tags:

http

go

goroutine

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?

like image 274
baijum Avatar asked Dec 20 '22 02:12

baijum


1 Answers

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.

like image 127
icza Avatar answered Dec 24 '22 01:12

icza