[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")
Canceled
은Context.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"
}
outputcontext 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 version
go version go1.10 darwin/amd64
초기 예제 코드
우선 이동하는 샘플 코드를 확인해 보세요.채널 코드 및 Context 코드 사용.
Go 언어 병렬 사용 안에 있는 물건을 나의 GitHub 위에 놓아라.
채널만 사용
샘플 코드 여기 있습니다.
context 사용
샘플 코드 여기 있습니다.
context 패키지 정의
context에 대한 정의를 봅시다.
Variables
var Canceled = errors.New("context canceled")
Canceled
은Context.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"
}
outputcontext 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 메서드를 사용할 때 수행해야 하는 두 가지 작업:.
context에 대한 정의를 봅시다.
Variables
var Canceled = errors.New("context canceled")
Canceled
은Context.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"
}
outputcontext 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 메서드를 사용할 때 수행해야 하는 두 가지 작업:.
작은 글자부터
WithValue에 데이터를 저장하는 예
값 유형별 보안 예
Go 언어 병렬 사용
값에 대한 유형 정의의 예
Context에 저장해야 하는 데이터
공식 문서
컨텍스트 값을 프로세스 또는 API 경계를 통과하는 요청 범위의 데이터에 중앙 집중식으로 사용합니다.
함수에 선택할 수 있는 매개 변수를 전달하는 데 사용할 수 없습니다.
Go 언어로 병렬 처리에 언급된 요청 범위의 데이터
(이걸 지켜야 하는 건 아니지만 지침을 정의하는 저자의 경험법칙)
Go 언어로 병렬 처리된 API 데이터 및 5가지 경험치 기준 충족 여부
데이터
일
이
삼
사
오
요청 번호
✓
✓
✓
✓
✓
사용자 ID
✓
✓
✓
✓
URL
✓
✓
API 서버 연결
권한 부여 영패
✓
✓
✓
✓
요청 표시
✓
✓
✓
총결산
공식 문서와'Go 언어로 병행 처리'를 배열하면서 Go의 context 패키지 사용 방법을 설명했다.
Go로 API 등을 만드는 데 유용한 패키지입니다.
꼭 익숙하게 사용하세요!
참고 문헌
Reference
이 문제에 관하여([Go] Context 패키지에 대한 설명), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SatoTakeshiX/items/8afa57d2ecd4f6a4a80a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)