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 중국어 웹사이트의 기타 관련 기사를 참조하세요!