
问题内容
在 http.HandlerFunc 中我得到了这个。但我的问题是:在应用超时上下文之后放置 defer cancel() 是否有意义?
因为底部的选择将继续监听,直到上下文完成。并且延迟将在上下文完成后执行。但那已经完成了吗? :)
// Apply timeout context var cancel context.CancelFunc ctx, cancel = context.WithTimeout(ctx, time.Duration(time.Duration(match_route.timeout) * time.Second)) defer cancel() // <h2 class="daan">解决方法</h2><p>是的,我认为这确实有道理,实际上使用 <code>defer cancel()</code> 的目的是确保调用 cancel 函数来释放与上下文关联的资源,无论函数如何退出,在您的示例中, <code>cancel()</code> 函数被推迟到 <code>http.HandlerFunc</code> 完成后或上下文完成时执行,因此 <code>go func()</code> 负责使用提供的上下文执行 <code>match_route.handler</code> 函数,然后调用 <code>cancel()</code>显式取消上下文,<code>select</code>语句用于等待上下文完成,如果由于超过截止日期而完成上下文,则会返回错误响应!</p>










