提供的程式碼定義了一個Find() 函數,該函數嘗試透過HTTP 呼叫從外部服務取得數據,並在指定的持續時間後超時。然而,人們擔心的是是否有潛在的goroutine洩漏,以及是否有辦法在逾時時取消HTTP請求。
有效控制取消對於 HTTP 請求,可以利用 context.Context 機制。透過使用帶有逾時的上下文,您可以確保在達到逾時時終止與該上下文關聯的所有 HTTP 請求。
以下程式碼範例如何實現基於上下文的取消:
<code class="go">// create a timeout or cancelation context to suit your requirements ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() req, err := http.NewRequest("GET", location, nil) // add the context to each request and they will be canceled in unison resp, err := http.Do(req.WithContext(ctx))</code>
在此程式碼中,ctx 指定逾時或取消標準,defer cancel() 保證函數返回時上下文始終被取消。透過 req.WithContext(ctx) 將上下文新增至每個請求中,當逾時到期時,所有請求將同時被取消。
這種方法確保了負責發出 HTTP 請求的 goroutine 在超時時被終止發生,防止 goroutine 洩漏並確保系統及時回應逾時。
以上是如何防止goroutine洩漏並在超時時取消HTTP請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!