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.
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