Go의 컨텍스트 관리는 애플리케이션의 여러 부분 간에 데이터를 전달하고 취소를 처리하는 수단을 제공합니다. 그러나 원본 데이터를 상속하지만 취소의 영향을 받지 않는 컨텍스트가 필요할 때 문제가 발생합니다.
이러한 요구를 해결하기 위해 Go 1.21은 컨텍스트 패키지 내에 WithoutCancel 메서드를 도입하여 이 요구 사항을 충족합니다.
또는 이전 버전의 Go를 사용하는 경우 취소를 방지하도록 특별히 설계된 고유한 컨텍스트 구현을 만들 수 있습니다. 방법은 다음과 같습니다.
import ( "context" "time" ) type noCancel struct { ctx context.Context } func (c noCancel) Deadline() (time.Time, bool) { return time.Time{}, false } func (c noCancel) Done() <-chan struct{} { return nil } func (c noCancel) Err() error { return nil } func (c noCancel) Value(key interface{}) interface{} { return c.ctx.Value(key) } // WithoutCancel returns a context that is never canceled. func WithoutCancel(ctx context.Context) context.Context { return noCancel{ctx: ctx} }
이 사용자 정의 컨텍스트 구현을 사용하면 다음과 같은 원본 컨텍스트의 복사본을 얻을 수 있습니다.
이 접근 방식을 사용하면 별도의 고루틴에서 비동기 작업을 실행할 수 있으므로 상위 컨텍스트가 종료되더라도 해당 작업이 실행되도록 보장할 수 있습니다.
위 내용은 Go에서 취소되지 않는 컨텍스트를 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!