如果我在用户点击网址时使用http.ListenAndServe
提供回复,我是否应该将该功能中的相应操作作为goroutine触发?
例如,请说我在/
听
func main() {
http.HandleFunc("/", provideMainContent)
}
func provideMainContent(w http.ResponseWriter, r *http.Request) {
/// Bunch of code, looks up details in databases, parses, then returns
}
provideMainContent
中的一堆代码是否应该包含在goroutine中,以便它不会减慢事后发生的任何潜在请求?
答案 0 :(得分:8)
简短回答,否
来自http.Serve
的GoDoc:
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.
然而,正如@Mellow Marmot
链接的问题中提到的那样,在从处理程序返回时可能会出现一些情况,您可能希望生成一个goroutine来执行某些处理,以便请求者不必等待所有要做出回应的处理。