Maison >développement back-end >Golang >Est-ce que cela a du sens avec defer Cancel() ?
a-t-il un sens en http.HandlerFunc
中我得到了这个。但我的问题是:在应用超时上下文之后放置 defer cancel()
?
Parce que la sélection du bas continuera à écouter jusqu'à ce que le contexte soit terminé. Et le délai sera exécuté une fois le contexte terminé. Mais est-ce que c'est fait ? :)
// Apply timeout context var cancel context.CancelFunc ctx, cancel = context.WithTimeout(ctx, time.Duration(time.Duration(match_route.timeout) * time.Second)) defer cancel() // <--- does this make sense go func(){ match_route.handler(w, r.WithContext(ctx)) cancel() }() select { case <-ctx.Done(): if ctx.Err() == context.DeadlineExceeded { http.Error(w, "Timeout", http.StatusRequestTimeout) } }
Oui, je pense que cela a du sens, utilisez en fait l'instruction defer cancel()
的目的是确保调用 cancel 函数来释放与上下文关联的资源,无论函数如何退出,在您的示例中, cancel()
函数被推迟到 http.HandlerFunc
完成后或上下文完成时执行,因此 go func()
负责使用提供的上下文执行 match_route.handler
函数,然后调用 cancel()
显式取消上下文,select
pour attendre que le contexte se termine et si le contexte se termine en raison du dépassement du délai, une réponse d'erreur sera renvoyée !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!