2016-11-04 8 views
0

Если я использую http.ListenAndServe для предоставления ответов, когда пользователь обращается к URL-адресу, должен ли я отключать соответствующие действия в функции как goroutine?Должен ли я использовать goroutines с http.ListenAndServe?

Например, говорят, что я слушаю в /:

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 так не замедлит любые потенциальные запросы, которые приходят после факта?

+2

метод ListenAndServe() делает это для вас, нам не нужно иметь дело с этим, просто помните, что каждый обработчик работает в другом goroutine –

ответ

6

Короткий ответ, нет

GoDoc из 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.

Однако, как упомянуто в вопросе связаны @Mellow Marmot, могут быть случаи, когда вы можете захотеть, чтобы породить goroutine, чтобы сделать некоторые когда вы возвращаетесь из обработчика, чтобы запросчик не должен был ждать завершения всей обработки, чтобы получить ответ.