[Go] Context 패키지에 대한 설명

9347 단어 Go

개요


Go 언어는 Gorutine 병렬 실행 코드를 허용하고 channel 처리 동기화 프로세스를 허용합니다.
channel은 값을 읽고 취소할 수 있지만, 시간 초과와 오류 처리를 스스로 실현해야 합니다.
context 패키지를 사용하면 취소 이유와 함수 처리를 끝내는 사선 등 추가 정보를 전달할 수 있다.
이 글은 컨텍스트 패키지를 소개할 것이다.

개발 환경

$ go version
go version go1.10 darwin/amd64

초기 예제 코드


우선 이동하는 샘플 코드를 확인해 보세요.채널 코드 및 Context 코드 사용.
Go 언어 병렬 사용 안에 있는 물건을 나의 GitHub 위에 놓아라.

채널만 사용


샘플 코드 여기 있습니다.

context 사용


샘플 코드 여기 있습니다.

context 패키지 정의


context에 대한 정의를 봅시다.

Variables

var Canceled = errors.New("context canceled")
CanceledContext.Err에서 되돌아오는 오류입니다. context가 취소되었을 때 호출됩니다.
var DeadlineExceeded error = deadlineExceededError{}
DeadlineExceeded는 컨텍스트가 만료되었을 때 Context.Err 반환되는 오류입니다.

func WithCancel

func WithCancel(parent Context) (ctx Context, cancel CancelFunc)
되돌아오는 cancel 함수를 호출할 때 done 채널의 새 Context를 닫습니다.
되돌아오는 cancel 함수를 호출하거나 부모 상하문의 Done 채널을 닫을 때, 되돌아오는 상하문의 Done 채널은 빠르게 닫힙니다.
이 상하문을 취소하면 이와 관련된 자원이 방출됩니다. 따라서 이 상하문에서 실행된 작업이 완료되면 코드는 즉시 cancel 함수를 호출해야 합니다.

func WithDeadline

func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc)
새 Context를 되돌려줍니다. 이 Context는 컴퓨터 시계가 지정한 deadline 시간을 거친 후done 채널을 닫습니다.
기한이 deadline보다 늦지 않도록 조정된 부모 상하문의 복사본을 되돌려줍니다.만약 모 항목의 만기일이 deadline보다 빠르면 모 상하문과 같은 의미를 되돌려줍니다.
반환 컨텍스트의 Done 채널은 만료, 반환된 cancel 함수가 호출되었거나 부모 컨텍스트의 Done 채널이 닫혔을 때 닫힙니다.
이 상하문을 취소하면 이 관련 자원을 방출합니다. 따라서 이 상하문에서 실행된 작업이 완료되면 코드는 즉시 cancel을 호출해야 합니다.

func WithTimeout

func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)
새로운 Context를 되돌려줍니다. 이 Context는 주어진 시간 아웃 후에 done 채널을 닫습니다.
구체적인 귀환WithDeadline(parent, time.Now().Add(timeout)).
이 상하문을 취소하면 이 관련 자원을 방출합니다. 따라서 이 상하문에서 실행된 작업이 완료되면 코드는 즉시 cancel을 호출해야 합니다.
예제 코드
이 예에서, 당신은 시간을 초과한 상하문을 전달하고, 이 상하문을 차단 함수에 전달하여 시간을 초과한 후에 이 기능을 포기하도록 합니다.
code
// Pass a context with a timeout to tell a blocking function that it
// should abandon its work after the timeout elapses.
ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)
defer cancel()

select {
case <-time.After(1 * time.Second):
    fmt.Println("overslept")
case <-ctx.Done():
    fmt.Println(ctx.Err()) // prints "context deadline exceeded"
}
output
context deadline exceeded

type CancelFunc

type CancelFunc = context.CancelFunc
기능 취소는 작업을 중지하도록 지시합니다.기능을 취소하고 작업을 중지할 때까지 기다리지 않습니다.첫 번째 호출 이후에는 CancelFunc에 대한 후속 호출이 수행되지 않습니다.

type Context

type Context = context.Context
Context는 만료일, 취소 신호 및 API 경계를 넘어 다른 값을 전달합니다.상하문 방법은 동시에 여러 개의 고르딘이 호출할 수 있다.

func Background

func Background() Context
배경이 비어 있지 않은 Context로 돌아갑니다.그것은 취소되지 않을 것이다. 값도, 기한도 없다.이것은 일반적으로main 함수, 초기화, 테스트에 사용되며, 요청을 전송하는 최상위 상하문으로 사용됩니다.
Context를 시작하는 방법입니다.

func TODO

func TODO() Context
TODO는 비어 있지 않은 Context를 반환합니다.
생산 환경에서 사용할 생각은 없지만 어떤 Context를 사용할지 알 수 없을 때 상위 코드를 제공하는 설치가 끝나지 않았지만 어떤 Context가 올지 알 수 있는 자리 표시자입니다.
TODO는 프로그램에서 컨텍스트가 올바르게 전파되는지 확인하는 정적 분석 도구로 식별됩니다.

func WithValue

func WithValue(parent Context, key interface{}, val interface{}) Context
WithValue는 키와 연관된 값이 val인 새 Context를 반환합니다.
컨텍스트 값을 프로세스 또는 API 경계를 통과하는 요청 범위의 데이터에 중앙 집중식으로 사용합니다.
함수에 선택할 수 있는 매개 변수를 전달하는 데 사용할 수 없습니다.
WithValue 메서드를 사용할 때 수행해야 하는 두 가지 작업:.
  • 사용 포인트는 Go의 비교 가능성을 충족시켜야 합니다.즉, 등가 연산자의 ==와!=이 색상은 색상이 바래집니다.
  • 여러 고르덴에서 접근해도 되돌아오는 값은 안전해야 한다.
  • 작은 글자부터


    WithValue에 데이터를 저장하는 예


    값 유형별 보안 예
    Go 언어 병렬 사용
    값에 대한 유형 정의의 예

    Context에 저장해야 하는 데이터


    공식 문서
    컨텍스트 값을 프로세스 또는 API 경계를 통과하는 요청 범위의 데이터에 중앙 집중식으로 사용합니다.
    함수에 선택할 수 있는 매개 변수를 전달하는 데 사용할 수 없습니다.
    Go 언어로 병렬 처리에 언급된 요청 범위의 데이터
    (이걸 지켜야 하는 건 아니지만 지침을 정의하는 저자의 경험법칙)
  • 데이터는 프로세스 또는 API 경계를 통과해야 합니다
  • 데이터는 변경되지 않아야 함
  • 데이터는 단순해야 한다
  • 데이터는 데이터여야 하고 방법이 있는 유형이 아니어야 한다
  • 데이터는 수정된 조작에 도움이 되어야 하며, 그것을 구동하는 것이 아니라
  • Go 언어로 병렬 처리된 API 데이터 및 5가지 경험치 기준 충족 여부


    데이터





    요청 번호





    사용자 ID




    URL


    API 서버 연결
    권한 부여 영패




    요청 표시



    총결산


    공식 문서와'Go 언어로 병행 처리'를 배열하면서 Go의 context 패키지 사용 방법을 설명했다.
    Go로 API 등을 만드는 데 유용한 패키지입니다.
    꼭 익숙하게 사용하세요!

    참고 문헌

  • https://github.com/SatoTakeshiX/sample-go-context/blob/master/useValueWithInterface/contextValueInterface.go
  • context - GoDoc
  • 좋은 웹페이지 즐겨찾기