PHpullh
학습 라이브러리/Go/context 심화

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 메타데이터를 가집니다.