context.WithValue()

(Context.WithValue에서 넘어옴)

1 개요[ | ]

context.WithValue()
  • Go의 context 패키지에서 제공하는, 컨텍스트에 키와 값을 저장하여 전달할 수 있는 함수
  • 이 기능은 주로 API 경로를 따라 데이터를 전달하거나 요청 범위 내에서 값을 저장하는 데 사용된다.
Go
Copy
package main

import (
	"context"
	"fmt"
)

func main() {
	// 기본 컨텍스트 생성
	ctx := context.Background()

	// 새로운 컨텍스트 생성하여 "userID" 키에 값을 저장
	ctx = context.WithValue(ctx, "userID", 42)

	// 다른 함수에 컨텍스트 전달
	processRequest(ctx)
}

func processRequest(ctx context.Context) {
	// 컨텍스트에서 "userID" 값 추출
	userID := ctx.Value("userID")
	if userID != nil {
		fmt.Printf("Processing request for user: %d\n", userID)
	} else {
		fmt.Println("No user ID found in context")
	}
}
  • 1. 컨텍스트 생성: context.Background()를 통해 기본 컨텍스트를 생성한다.
  • 2. context.WithValue 사용: context.WithValue(ctx, "userID", 42)를 통해 "userID"라는 키에 42라는 값을 저장한다. 새로운 컨텍스트가 반환되며, 이는 기존 컨텍스트를 기반으로 한 컨텍스트이다.
  • 3. 컨텍스트 전달: processRequest 함수에 컨텍스트를 전달하여, 해당 함수에서 컨텍스트에 저장된 값을 사용할 수 있게 한다.
  • 4. 컨텍스트 값 추출: ctx.Value("userID")를 사용하여 컨텍스트에서 "userID" 키에 대한 값을 추출한다. 반환된 값이 nil이 아닌 경우 유효한 사용자 ID를 처리하게 된다.

이러한 방식으로 context.WithValue를 사용하면 코드의 흐름을 따라 부가적인 데이터를 전달할 수 있다. 단, context.WithValue는 주로 추적 정보나 비정형화된 데이터를 전달하는 데 사용해야 하며, 구조화된 데이터는 전용 구조체나 다른 방법을 사용하여 전달하는 것이 권장된다.

2 같이 보기[ | ]