Go의 컨텍스트는 요청과 함께 임의의 값을 전달하고 취소를 추적하는 메커니즘을 제공합니다. 기본적으로 모든 컨텍스트는 동일한 취소 메커니즘을 공유합니다. 그러나 특정 시나리오에서는 취소에서 컨텍스트 전파를 분리해야 할 수도 있습니다.
요청 수명 이후의 작업을 수행하는 HTTP 핸들러를 고려하세요. 응답을 반환한 후 핸들러는 고루틴에서 비동기 작업을 시작할 수 있습니다. 이 작업은 컨텍스트 값에 대한 액세스가 필요할 수 있지만 원래 요청 컨텍스트가 취소된 경우 종료되어서는 안 됩니다.
WithoutCancel은 Go 1.21에 도입되어 간단한 방법을 제공합니다. 취소되지 않는 컨텍스트를 생성합니다. 이 방법을 사용하면 저장된 모든 값을 포함하지만 취소 상태와는 독립적인 원본 컨텍스트의 복사본을 얻을 수 있습니다.
Go 1.21 이전에는 사용자 정의 취소되지 않는 컨텍스트의 구현이 필요했습니다. 핵심은 context.Context 인터페이스를 충족하는 유형을 생성하고 취소를 방지하기 위해 다음 메서드를 재정의하는 것입니다.
또한 구현 시 원본 컨텍스트를 저장하고 Value() 호출을 위임하여 저장된 값을 검색해야 합니다.
import ( "context" "github.com/mypackage/mycontext" ) func Handler(ctx context.Context) (interface{}, error) { result := doStuff(ctx) newContext := mycontext.WithoutCancel(ctx) go func() { doSomethingElse(newContext) }() return result }
취소되지 않는 원리를 이해함으로써 개발자는 컨텍스트를 파악하고 사용 가능한 도구를 활용하여 맞춤형 솔루션을 만들거나 Go의 내장 기능을 활용하여 취소 없이 원하는 컨텍스트 전파를 달성할 수 있습니다.
위 내용은 취소 전파 없이 Go에서 컨텍스트를 어떻게 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!