"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como adicionar vários pares de valores-chave a um contexto Go de maneira eficiente: chamadas únicas ou múltiplas?

Como adicionar vários pares de valores-chave a um contexto Go de maneira eficiente: chamadas únicas ou múltiplas?

Publicado em 2024-11-24
Navegar:812

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

Adições de pares de valores-chave em Context.WithValue: Adições simples vs. múltiplas

No pacote de contexto do Go, context.WithValue permite o adição de dados específicos da solicitação à pilha de manipulação de solicitações. No entanto, ao lidar com vários pares de valores-chave, a abordagem ideal não é imediatamente aparente.

Várias chamadas para WithValue()

Uma opção é chamar WithValue( ) várias vezes, adicionando incrementalmente cada par de valores-chave ao contexto. Embora esse método seja direto, ele pode se tornar complicado para um grande número de pares.

Uso de uma estrutura

Uma alternativa é empregar uma estrutura que encapsula todos os pares chave-valor, reduzindo as chamadas WithValue() para um. No entanto, essa abordagem pode resultar em cópias desnecessárias de dados.

Solução baseada em mapa

Para melhorar o desempenho de pesquisas rápidas de valores-chave, considere usar um mapa e adicioná-lo como um valor único para o contexto. Isso permite acesso O(1) eficiente a valores individuais.

Abordagem Híbrida

Uma solução híbrida combina os benefícios de ambas as abordagens. Crie uma estrutura wrapper que oculte um mapa não exportado e forneça um método getter. Ao adicionar apenas a estrutura do wrapper ao contexto, o acesso simultâneo é preservado, a cópia de dados é minimizada e as pesquisas rápidas de valores-chave são mantidas.

Exemplo: Solução Híbrida

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"))

Conclusão

O método ideal para adicionar várias chaves -valor pares para um contexto depende dos requisitos específicos do aplicativo. Para situações em que o desempenho é crucial e são necessárias pesquisas rápidas de valores-chave, uma abordagem híbrida ou baseada em mapas é mais adequada. Para cenários menos sensíveis ao desempenho ou com um número limitado de pares de valores-chave, várias chamadas para WithValue() ou o uso de uma estrutura podem ser suficientes.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3