>백엔드 개발 >Golang >Go Context — TODO() 대 Background() 더 이상 혼란스럽지 않습니다!

Go Context — TODO() 대 Background() 더 이상 혼란스럽지 않습니다!

PHPz
PHPz원래의
2024-09-10 06:33:32855검색

Go Context — TODO() vs Background() No more confusing!

Go에서 컨텍스트 패키지는 요청 범위 값, 취소 신호 및 기한을 관리하는 데 도움이 됩니다.
컨텍스트를 시작하는 두 가지 일반적인 방법은 context.TODO() 및 context.Background()입니다.
유사하게 작동하지만 용도는 다릅니다.

컨텍스트.배경()

context.Background()는 특별한 처리(예: 취소 또는 기한)가 필요하지 않은 경우 기본값입니다.
이는 main, init에서 또는 더 구체적인 컨텍스트가 필요하지 않은 작업을 초기화할 때 자주 사용됩니다.

예:

 func main() {
     ctx := context.Background()
     server := http.Server{Addr: ":8080", BaseContext: func(net.Listener) context.Context {
         return ctx
     }}
     log.Fatal(server.ListenAndServe())
 }

이 예에서 context.Background()는 HTTP 서버에 대한 기본 컨텍스트를 설정하는 데 사용됩니다.

컨텍스트.TODO()

context.TODO()는 자리 표시자 컨텍스트입니다. 어떤 컨텍스트를 제공해야 할지 확신이 없거나 나중에 리팩토링할 계획이 있을 때 사용하세요.

예:

 func processOrder() {
     ctx := context.TODO() // Placeholder, decision on context pending
     err := db.SaveOrder(ctx, orderData)
     if err != nil {
         log.Println("Failed to save order:", err)
     }
 }

여기서 context.TODO()는 보다 구체적인 컨텍스트가 정의될 ​​때까지 데이터베이스 작업에 일시적으로 사용됩니다.

주요 차이점

두 함수 모두 빈 컨텍스트를 반환하지만 서로 다른 의도를 표현합니다.

  • context.Background(): 특별한 컨텍스트 기능이 필요하지 않다고 확신할 때 사용됩니다.
  • context.TODO(): 향후 변경 사항을 알리는 임시 자리 표시자 컨텍스트입니다.

결론

context.Background()를 사용해야 하는 경우:

  • HTTP 서버나 데이터베이스 연결 등 핵심 서비스를 초기화할 때
  • 취소, 기한, 가치가 필요하지 않은 경우

context.TODO()를 사용해야 하는 경우:

  • 리팩토링할 때 아직 컨텍스트를 결정하지 않았습니다.
  • 향후 개선이 필요한 초기 단계의 코드를 구현할 때

위 내용은 Go Context — TODO() 대 Background() 더 이상 혼란스럽지 않습니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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