Go 的 context 包允许您使用 context.WithValue 传递请求特定的数据。但是,目前尚不清楚如何有效地存储多个键值对。
考虑以下选项:
1。多次调用 WithValue()
多次调用 WithValue(),每次都使用一个新的键值对。这很简单,但可能很麻烦。
2.具有键值对的结构
创建一个结构来保存所有键值对并将其作为单个值传递给 WithValue()。这允许以后轻松访问所有密钥,但可能涉及不必要的大型数据结构复制。
3.混合解决方案
将键值对存储在映射中并创建一个包装结构,该结构提供 getter 来访问各个值。这允许安全的并发访问并避免复制大量数据。
以下是混合解决方案的示例:
type Values struct { m map[string]string } func (v Values) Get(key string) string { return v.m[key] } func main() { v := Values{map[string]string{ "1": "one", "2": "two", }} ctx := context.Background() ctx2 := context.WithValue(ctx, "myvalues", v) fmt.Println(ctx2.Value("myvalues").(Values).Get("2")) }
输出:
two
最佳方法取决于具体要求。对于具有大量键值对的性能关键场景,建议使用混合解决方案。否则,多次调用 WithValue() 或具有键值对的结构可能会更方便。
以上是Go中如何使用context.WithValue高效传递多个键值对?的详细内容。更多信息请关注PHP中文网其他相关文章!