>  기사  >  백엔드 개발  >  Go에서 요청 취소를 확인하는 방법은 무엇입니까?

Go에서 요청 취소를 확인하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-08 08:55:02345검색

How to Check for Request Cancellation in Go?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.