>백엔드 개발 >Golang >Context.Background() 대 Context.TODO(): 언제 어느 것을 사용해야 합니까?

Context.Background() 대 Context.TODO(): 언제 어느 것을 사용해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-07 18:18:03473검색

Context.Background() vs Context.TODO(): When Should You Use Which?

Background() 대 TODO(): 어떤 컨텍스트를 사용해야 합니까?

글로벌 사인 패키지에서 go mongo-driver로 코드를 마이그레이션할 때 적절한 컨텍스트를 이해하십시오. context.TODO() 및 context.Background()를 사용하는 것이 중요합니다.

Background()

문서에 따르면 context.Background()는 비를 반환합니다. -nil, 다음 특성을 갖는 빈 컨텍스트:

  • 취소되지 않음
  • 값 없음
  • 기한 없음

일반적으로 사용됩니다. 주요 기능, 초기화 및 테스트에서. 의미 있는 컨텍스트를 사용할 수 없는 경우 context.Background()는 대체를 제공합니다.

TODO()

context.TODO()도 nil이 아닌 빈 값을 반환합니다. 문맥. 그러나 특히 어떤 컨텍스트를 사용할지 불분명하거나 컨텍스트를 아직 사용할 수 없는 경우에 해당 용도로 사용됩니다. context.TODO()를 사용하면 컨텍스트가 필요하지만 현재 특정 컨텍스트가 없음을 명시적으로 문서화할 수 있습니다.

모범 사례

  • HTTP 요청 또는 기타 애플리케이션별 시나리오와 관련된 컨텍스트를 사용하는 것이 좋습니다.
  • 사용 가능한 명확한 컨텍스트가 없지만 여전히 컨텍스트가 필요함을 표시해야 하는 상황에서는 context.TODO()를 사용하세요.
  • 기본, 초기화 또는 테스트 기능 외부에서 context.Background()를 사용하지 마세요.

사용 예

다음 시나리오를 고려하세요. HTTP 핸들러는 특정 시간 제한 내에 MongoDB 쿼리를 실행해야 합니다.

ctx, cancel := context.WithTimeout(r.Context(), 6 * time.Second)
defer cancel()

// ctx automatically times out after 6 seconds
curs, err := c.Find(ctx, bson.M{"some": "filter"})

이 예에서 context.WithTimeout()은 요청 컨텍스트(r.Context())에서 파생되는 새 컨텍스트를 생성합니다. . MongoDB 작업이 6초를 초과하면 컨텍스트 시간이 초과되어 쿼리를 취소해야 한다는 신호를 보냅니다.

결론

context.TODO()와 context 중에서 선택합니다. Background()는 특정 사용 시나리오를 이해하고 다운스트림 기능에 의미 있고 적절한 컨텍스트를 제공하는지 확인하는 문제입니다.

위 내용은 Context.Background() 대 Context.TODO(): 언제 어느 것을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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