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