제공된 코드에서 findCicCode() 함수의 결과 또는 시간 초과를 처리하기 위해 select 문을 사용하여 시간 초과 메커니즘을 구현했습니다. 50밀리초. 그러나 시간 초과 후에도 HTTP 호출이 계속 실행될 경우 리소스 누출 가능성에 대한 우려를 표명하셨습니다.
이 문제를 해결하려면 다음을 활용할 수 있습니다. Go의 컨텍스트 개념 컨텍스트는 컨텍스트별 값을 고루틴과 연결하는 방법을 제공하고 취소를 허용합니다. 컨텍스트를 사용하면 시간 초과가 발생할 때 진행 중인 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!