go Context

김새우·2022년 12월 5일
0

go

목록 보기
13/13

go에서 context는 작업 명세서 같은 역할
작업 가능 시간
작업 취소 등의 작업 흐름 제어 하는데 사용

import "context"

ctx, cancel := context.WithCancel(context.Backgroud())
ctx, cancel := context.WithDeadline(context.Background(), TIME)
ctx, cancel := context.WithTimeout(context.Background(), DURATION)

withCancel
컨텍스트가 cancel 혹은 timeout으로 종료되면 컨텍스트의 done이 호출됨
ctx, cancel := context.WithCancel(context.Backgroud())

WithDeadline
작업 흐름(고루틴)을 언제까지 유지할 것 인지결정할때 사용
ctx, cancel := context.WithDeadline(context.Background(), TIME)

  d := time.Now().Add(3 * time.Second)
  ctx, cancel := context.WithDeadline(context.Background(), d)

3초 후 context를 종료시키기 위한 코드
데드라인에 의해 3초 후에 컨텍스트는 종료 됨

데드라인으로 컨텍스트를 종료 시켜도
cancel 함수로 컨텍스트를 닫아줘야 한다

WithTimeout
컨텍스트의 Timeout은 작업 흐름(컨텍스트)을 얼마 간 유지할 지 결정

 ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)

3초 동안 실행되고 종료 됨

WithDeadline과 WithTimeout의 결과는 동일하지만
Deadline은 언제까지 유지할지를 지정하는 거라면
Timeout은 얼마간 유지할지를 지정하는 것

또한 timeout도 타임아웃으로 종료 시키더라도 cancel 함수를 통해 컨텍스트를 닫아줘야함

WithValue
컨텍스트의 withValue를 사용하여 채널과 같이 서브 고루틴에 데이터를 전달 가능

ctx := context.WithValue(context.Background(), KEY, VALUE)
v := ctx.Value(KEY)

컨텍스트 랩핑해서 쓰기도 함

0개의 댓글