>일반적인 문제 >golang의 ctx 란 무엇입니까?

golang의 ctx 란 무엇입니까?

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌원래의
2023-06-09 14:34:082745검색

Golang의

ctx는 Context의 약어로 표준 라이브러리의 유형으로 요청 범위별 값, 취소 신호, "goroutine" 간의 기한과 같은 메타데이터를 전송하는 데 사용됩니다.

golang의 ctx 란 무엇입니까?

이 튜토리얼의 운영 체제: Windows 10 시스템, Go1.20.1 버전, Dell G3 컴퓨터.

Golang에서 ctx는 Context의 약어로, 표준 라이브러리의 타입입니다.

Context 유형은 요청 범위별 값, 취소 신호 및 고루틴 간의 기한과 같은 메타데이터를 전달하는 데 사용됩니다. 요청을 생성할 때 루트 컨텍스트가 생성되어 애플리케이션 전체의 호출 체인에 전달될 수 있습니다. 요청이 전파되면 이 컨텍스트는 다른 고루틴에 의해 복사되어 기본 통신에 사용될 수 있습니다.

ctx의 주요 기능은 다음과 같습니다.

  • 메타데이터 전송: HTTP 요청 네트워크 호출 체인에서 일부 메타데이터 정보(예: 사용자 인증 토큰)를 전달하고 사용하는 것이 선호되는 방법입니다. 이 시나리오를 구현하세요.

  • 제어 흐름 시간 초과 및 취소: 다중 레벨 함수 중첩 호출 체인에서는 오류가 호출 체인의 각 레이어를 통과해야 하는 경우가 있으며, 경우에 따라 Goroutine을 동시에 취소해야 하는 경우도 있습니다. 그러한 문제를 해결하는 방법.

다음은 ctx를 사용하여 고루틴의 취소 및 시간 초과를 제어하는 ​​방법을 보여주는 간단한 샘플 코드입니다.

func main() {
   ctx, cancel := context.WithCancel(context.Background())
   defer cancel() // 常用结合 defer 安排执行
   go doSomething(ctx)
   time.Sleep(10 * time.Second)
}
func doSomething(ctx context.Context) {
   select {
      case <-time.After(time.Hour):
         fmt.Println("do something")
      case <-ctx.Done():
         fmt.Println("canceled by user:", ctx.Err())
      }
}

샘플 코드에서는 `context.WithCancel`을 사용하여 컨텍스트를 생성하고 취소 함수(`cancel()`)를 전달한 다음 이를 `doSomething` 함수에 전달합니다. `doSomething`에서는 `select`를 통해 채널 중 2개를 모니터링하고 10초가 지나면 메인 고루틴이 `cancel` 기능을 실행하여 `ctx`에 Done 신호를 보내고, 이로 인해 `doSomething` 수신의 고루틴이 발생합니다. 이 신호와

위 내용은 golang의 ctx 란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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