Doug Smith
Doug Smith

Reputation: 29314

Should I be using goroutines with http.ListenAndServe?

If I'm using http.ListenAndServe to provide responses when the user hits a URL, should I be firing off the corresponding actions in the function as a goroutine ?

For instance, say I'm listening at /:

func main() {
    http.HandleFunc("/", provideMainContent)
}

func provideMainContent(w http.ResponseWriter, r *http.Request) {
    /// Bunch of code, looks up details in databases, parses, then returns
}

Should the bunch of code in provideMainContent be wrapped in a goroutine so it doesn't slow down any potential requests that come after the fact ?

Upvotes: 4

Views: 2034

Answers (1)

John S Perayil
John S Perayil

Reputation: 6345

Short answer, No

GoDoc from http.Serve :

Serve accepts incoming HTTP connections on the listener l, creating a new service goroutine for each. The service goroutines read requests and then call handler to reply to them.

However as mentioned in the question linked by @Mellow Marmot, there might be cases where you might want to spawn a goroutine to do some processing while you return from the handler so that the requester does not have to wait for all the processing to be done to get a response.

Upvotes: 10

Related Questions