在提供的代码中,您已经实现了一个函数 Find(),它利用 goroutine(go func() 语句)使用 findCicCode() 进行异步数据检索。您设置了 50 毫秒的超时时间来接收 Goroutine 的响应。
但是,您担心如果超过超时时间,可能会导致 Goroutine 泄漏。此外,您希望能够在超时时取消 findCicCode() 发出的 HTTP 请求。
Goroutine 泄漏预防
为了处理 Goroutine 泄漏,它对于确保在特定范围内创建的任何 goroutine 在范围结束之前终止至关重要。在这种情况下,当达到超时时,取消 select 语句中的 goroutine 非常重要:
<code class="go">case <-time.After(50 * time.Millisecond): // Cancel the goroutine to prevent a potential leak close(ch) return "Request timed out", false</code>
HTTP 请求取消
取消 HTTP 请求goroutine 中,您可以利用 Go 标准库提供的 context.Context 和 context.CancelFunc:
<code class="go">// Create a context with a timeout of 50 milliseconds ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) defer cancel() // Execute the findCicCode() function within this context data, status := findCicCodeWithContext(ctx) // If the context is canceled (timeout), the HTTP requests will be aborted</code>
以上是如何防止Goroutine泄漏并在超时内取消HTTP请求?的详细内容。更多信息请关注PHP中文网其他相关文章!