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 같이 보기[ | ]
편집자 Jmnote
로그인하시면 댓글을 쓸 수 있습니다.