«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как эффективно добавить несколько пар ключ-значение в контекст Go: одиночный или множественный вызов?

Как эффективно добавить несколько пар ключ-значение в контекст Go: одиночный или множественный вызов?

Опубликовано 24 ноября 2024 г.
Просматривать:283

How to Add Multiple Key-Value Pairs to a Go Context Efficiently: Single vs. Multiple Calls?

Добавление пар ключ-значение в Context.WithValue: одно или несколько добавлений

В пакете контекста Go context.WithValue позволяет добавление данных, специфичных для запроса, в стек обработки запросов. Однако при работе с несколькими парами ключ-значение оптимальный подход не сразу очевиден.

Несколько вызовов WithValue()

Один из вариантов — вызвать WithValue( ) несколько раз, постепенно добавляя в контекст каждую пару ключ-значение. Хотя этот метод прост, он может стать громоздким для большого количества пар.

Использование структуры

Альтернативой является использование структуры, которая инкапсулирует все пары ключ-значение, сокращая количество вызовов WithValue() до одного. Однако такой подход может привести к ненужному копированию данных.

Решение на основе карты

Чтобы повысить производительность быстрого поиска значений ключа, рассмотрите возможность использования карты и ее добавления. как единственное значение в контексте. Это обеспечивает эффективный доступ O(1) к отдельным значениям.

Гибридный подход

Гибридное решение сочетает в себе преимущества обоих подходов. Создайте структуру-оболочку, которая скрывает неэкспортированную карту и предоставляет метод получения. Добавление в контекст только структуры-оболочки позволяет сохранить одновременный доступ, свести к минимуму копирование данных и обеспечить быстрый поиск значений ключа.

Пример: гибридное решение

type Values struct {
    m map[string]string
}

func (v Values) Get(key string) string {
    return v.m[key]
}
v := Values{map[string]string{
    "1": "one",
    "2": "two",
}}

c := context.Background()
c2 := context.WithValue(c, "myvalues", v)

fmt.Println(c2.Value("myvalues").(Values).Get("2"))

Заключение

Оптимальный метод добавления нескольких ключей Пары значений в контексте зависят от конкретных требований приложения. В ситуациях, когда производительность имеет решающее значение и необходим быстрый поиск значений ключей, наиболее подходящим является подход на основе карт или гибридный подход. Для менее чувствительных к производительности сценариев или с ограниченным количеством пар ключ-значение может быть достаточно нескольких вызовов WithValue() или использования структуры.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3