GO · 고루틴/채널
context 심화
context.Context로 취소, 타임아웃, 값 전달을 관리합니다. Go 동시성의 핵심 제어 메커니즘입니다.
고루틴/채널중급contexttimeoutcancelvalue
핵심 설명
context.Context로 취소, 타임아웃, 값 전달을 관리합니다. Go 동시성의 핵심 제어 메커니즘입니다.
Go code
package main
import (
"context"
"fmt"
"time"
)
func slowOperation(ctx context.Context) error {
select {
case <-time.After(5 * time.Second):
fmt.Println("작업 완료")
return nil
case <-ctx.Done():
fmt.Println("작업 취소됨:", ctx.Err())
return ctx.Err()
}
}
func main() {
// 타임아웃 컨텍스트
ctx, cancel := context.WithTimeout(
context.Background(), 2*time.Second,
)
defer cancel() // 리소스 해제 보장
if err := slowOperation(ctx); err != nil {
fmt.Println("에러:", err)
}
// 값 전달 (요청 ID 등)
type ctxKey string
ctx2 := context.WithValue(context.Background(),
ctxKey("requestID"), "req-123")
if v := ctx2.Value(ctxKey("requestID")); v != nil {
fmt.Println("요청 ID:", v)
}
}학습 팁
context는 항상 함수의 첫 번째 매개변수로 전달하세요: func DoSomething(ctx context.Context, ...)
주의할 점
context.WithValue의 키로 string 같은 내장 타입을 사용하면 다른 패키지와 충돌할 수 있습니다. 비공개 타입을 키로 사용하세요.
자주 묻는 질문
context 심화란 무엇인가요?
context.Context 로 취소, 타임아웃, 값 전달을 관리합니다. Go 동시성의 핵심 제어 메커니즘입니다.
context 심화 학습 시 주의할 점은 무엇인가요?
context.WithValue 의 키로 string 같은 내장 타입을 사용하면 다른 패키지와 충돌할 수 있습니다. 비공개 타입을 키로 사용하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.