Go에서 요청 취소 확인
Go에서는 요청이 취소되었는지 확인하는 것이 비동기 작업을 원활하게 처리하는 데 필수적입니다. 간단한 해결책은 취소 신호가 포함된 요청의 컨텍스트를 모니터링하는 것입니다.
다음 코드를 고려하세요.
package main import ( "context" "log" "net/http" ) func main() { r, _ := http.NewRequest("GET", "http://example.com", nil) ctx, cancel := context.WithCancel(context.Background()) r = r.WithContext(ctx) ch := make(chan bool) go func() { _, err := http.DefaultClient.Do(r) log.Println(err == context.Canceled) ch <- true }() cancel() <-ch }
이 코드는 Do( ) 컨텍스트가 있습니다.취소되었습니다. 하지만 Go 1.9에서는 놀랍게도 true 대신 false가 인쇄됩니다.
올바른 접근 방식
Go 1.13 이전 버전의 경우 취소를 확인하는 적절한 방법은 다음과 같습니다. context.Err()을 사용하고 반환 값을 다음과 비교합니다. context.Canceled:
if r.Context().Err() == context.Canceled { // Request was cancelled }
Go 1.13
Go 1.13 이상에서는 오류가 도입되면서 취소 확인이 더욱 편리해졌습니다.Is() 기능. 이 기능을 사용하면 오류가 여러 레이어로 래핑된 경우에도 오류가 다른 오류 유형과 일치하는지 확인할 수 있습니다.
if errors.Is(err, context.Canceled) { // Request was cancelled }
이 방법을 사용하면 다른 오류가 context.Canceled로 래핑된 경우에도 정확한 취소 감지가 보장됩니다.
위 내용은 Go에서 요청 취소를 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!