>  기사  >  백엔드 개발  >  Go에서 여러 키-값 쌍을 컨텍스트에 전달하는 방법은 무엇입니까?

Go에서 여러 키-값 쌍을 컨텍스트에 전달하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-12 12:58:02926검색

How to Pass Multiple Key-Value Pairs to a Context in Go?

context.WithValue: 여러 키-값 쌍 전달

Go의 컨텍스트 패키지에서는 WithValue() 함수를 사용하여 컨텍스트에 키-값 쌍을 추가할 수 있습니다. 추가된 쌍이 포함된 새 컨텍스트를 반환합니다. 그러나 여러 키-값 쌍을 컨텍스트에 전달해야 하는 경우에는 어떻게 해야 합니까?

옵션 1: WithValue()를 여러 번 호출

WithValue()를 호출할 수 있습니다. 여러 번, 매번 새 컨텍스트를 첫 번째 인수로 전달합니다.

import (
    "context"
)

func main() {
    // Create a background context.
    ctx := context.Background()

    // Add key-value pairs one by one.
    ctx = context.WithValue(ctx, "key1", "value1")
    ctx = context.WithValue(ctx, "key2", "value2")
}

옵션 2: 데이터 구조 사용

여러 키를 추가해야 하는 경우- 값 쌍을 보유하려면 단일 데이터 구조를 사용하는 것이 더 효율적일 수 있습니다. 그런 다음 WithValue()를 사용하여 전체 데이터 구조를 컨텍스트에 추가할 수 있습니다.

type MyStruct struct {
    Key1 string
    Key2 string
}

func main() {
    // Create a context.
    ctx := context.Background()

    // Create a data structure.
    data := MyStruct{
        Key1: "value1",
        Key2: "value2",
    }

    // Add the data structure to the context.
    ctx = context.WithValue(ctx, "mydata", data)
}

옵션 3: 하이브리드 솔루션

하이브리드 접근 방식을 사용할 수도 있습니다. 여기서 키-값 쌍의 맵을 보유하는 래퍼 구조체를 만듭니다. 그런 다음 래퍼 구조체를 컨텍스트에 추가할 수 있습니다.

type MyWrapper struct {
    m map[string]string
}

func (w *MyWrapper) Get(key string) string {
    return w.m[key]
}

func main() {
    // Create a context.
    ctx := context.Background()

    // Create a wrapper struct.
    wrapper := MyWrapper{
        m: map[string]string{
            "key1": "value1",
            "key2": "value2",
        },
    }

    // Add the wrapper struct to the context.
    ctx = context.WithValue(ctx, "mywrapper", wrapper)
}

결론

사용 방법은 특정 사용 사례 및 성능 요구 사항에 따라 달라집니다. 최소한의 오버헤드로 소수의 키-값 쌍을 추가해야 하는 경우 옵션 1을 사용할 수 있습니다. 성능이 중요하다면 옵션 2 또는 옵션 3을 사용할 수 있습니다.

위 내용은 Go에서 여러 키-값 쌍을 컨텍스트에 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.