首页 > 后端开发 > Golang > 如何有效地将多个键值对添加到 Go 上下文:单个调用与多个调用?

如何有效地将多个键值对添加到 Go 上下文:单个调用与多个调用?

Susan Sarandon
发布: 2024-11-16 01:12:03
原创
640 人浏览过

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

Context.WithValue 中的键值对添加:单个添加与多个添加

在 Go 的 context 包中,context.WithValue 允许将特定于请求的数据添加到请求处理堆栈。然而,在处理多个键值对时,最佳方法并不是立即显而易见的。

多次调用 WithValue()

一种选择是调用 WithValue( ) 多次,逐步将每个键值对添加到上下文中。虽然此方法很简单,但对于大量对来说可能会变得很麻烦。

结构体的使用

另一种方法是使用一个封装所有结构体键值对,将 WithValue() 调用减少为 1。但是,这种方法可能会导致不必要的数据复制。

基于地图的解决方案

要增强快速键值查找的性能,请考虑使用地图并添加它作为上下文的单个值。这允许以 O(1) 的方式高效地访问各个值。

混合方法

混合解决方案结合了两种方法的优点。创建一个包装结构,隐藏未导出的映射并提供 getter 方法。通过仅将包装器结构添加到上下文,可以保留并发访问,最大限度地减少数据复制,并保持快速键值查找。

示例:混合解决方案

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() 或使用结构体可能就足够了。

以上是如何有效地将多个键值对添加到 Go 上下文:单个调用与多个调用?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板