在您提供的程式碼中,您已經使用 select 語句實現了超時機制來處理 findCicCode() 函數的結果或逾時50 毫秒。但是,您表示擔心如果 HTTP 呼叫即使在逾時後繼續執行,也可能會導致資源洩漏。
要解決此問題,您可以利用Go 中上下文的概念。 Context 提供了一種將上下文特定值與 goroutine 關聯起來的方法,並允許取消。透過上下文,您可以在發生逾時時取消正在進行的 HTTP 呼叫。
以下是如何實現HTTP 請求的上下文取消的範例:
<code class="go">package main import ( "context" "fmt" "net/http" "time" ) type Response struct { data interface{} status bool } func Find() (interface{}, bool) { ch := make(chan Response, 1) ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() // Ensure cancelation when the function exits go func() { data, status := findCicCode(ctx) ch <- Response{data: data, status: status} }() select { case response := <-ch: return response.data, response.status case <-time.After(50 * time.Millisecond): return "Request timed out", false } } func main() { data, timedOut := Find() fmt.Println(data, timedOut) }</code>
在此修改後的程式碼中:
透過使用此方法,您可以確保在達到逾時時取消任何正在進行的HTTP 請求,從而防止不必要的資源消耗。
以上是Go中發生逾時時如何有效取消HTTP請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!