>  기사  >  백엔드 개발  >  전파를 취소하지 않고 Go에서 컨텍스트 복사본을 만드는 방법은 무엇입니까?

전파를 취소하지 않고 Go에서 컨텍스트 복사본을 만드는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-08 21:46:01577검색

How to Create a Context Copy in Go Without Cancel Propagation?

Go에서 취소 전파 없이 컨텍스트 복사본 만들기

Go에서 컨텍스트 작업을 할 때 동일한 값을 포함하지만 취소 측면에서 독립적으로 동작하는 기존 컨텍스트의 복사본입니다. 예를 들어, 이 시나리오는 HTTP 요청에 응답한 후 원래 컨텍스트보다 오래 지속될 수 있는 비동기 작업을 수행하려고 할 때 발생합니다.

기존 접근 방식에서는 컨텍스트에 저장된 가능한 모든 값을 수동으로 추적하고 생성하는 작업이 포함됩니다. 해당 값을 복사하기 위한 새 컨텍스트. 그러나 더 간단하고 관리하기 쉬운 솔루션이 있습니다.

Go 1.21에서는 컨텍스트 패키지에 WithoutCancel 기능이 도입되었습니다. 이 함수를 사용하면 원래 컨텍스트의 모든 값을 상속하지만 취소가 적용되지 않는 새 컨텍스트를 생성할 수 있습니다.

import "context"

// WithoutCancel returns a context that is never canceled.
func WithoutCancel(ctx context.Context) context.Context {
    return context.WithValue(context.Background(), context.NoCancel{}, struct{}{})
}

WithoutCancel을 사용하려면 원래 컨텍스트를 다음과 같이 래핑하면 됩니다.

func Handler(ctx context.Context) (interface{}, error) {
    result := doStuff(ctx)
    newContext := context.WithoutCancel(ctx)
    go func() {
        doSomethingElse(newContext)
    }()
    return result
}

이제 새로운 고루틴은 원래 컨텍스트가 취소될 때 취소되지 않는 원래 컨텍스트의 복사본으로 작동합니다. 이는 비동기 작업의 수명을 관리하는 데 필요한 유연성과 제어 기능을 제공합니다.

위 내용은 전파를 취소하지 않고 Go에서 컨텍스트 복사본을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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