在提供的程式碼中,您已經實作了一個函數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中文網其他相關文章!