首页 > 后端开发 > Golang > 如何在 Go 中将多个键值对传递到上下文?

如何在 Go 中将多个键值对传递到上下文?

Barbara Streisand
发布: 2024-11-12 12:58:02
原创
994 人浏览过

How to Pass Multiple Key-Value Pairs to a Context in Go?

context.WithValue:传递多个键值对

在 Go 的 context 包中,你可以使用 WithValue() 函数将键值对添加到上下文中,它返回一个带有添加的对的新上下文。但是,如果您需要将多个键值对传递给上下文怎么办?

选项 1:多次调用 WithValue()

您可以调用 WithValue()多次,每次将新上下文作为第一个参数传递:

import (
    "context"
)

func main() {
    // Create a background context.
    ctx := context.Background()

    // Add key-value pairs one by one.
    ctx = context.WithValue(ctx, "key1", "value1")
    ctx = context.WithValue(ctx, "key2", "value2")
}
登录后复制

选项 2:使用数据结构

如果需要添加多个键值对,使用单个数据结构来保存它们可能会更有效。然后,您可以使用 WithValue() 将整个数据结构添加到上下文中:

type MyStruct struct {
    Key1 string
    Key2 string
}

func main() {
    // Create a context.
    ctx := context.Background()

    // Create a data structure.
    data := MyStruct{
        Key1: "value1",
        Key2: "value2",
    }

    // Add the data structure to the context.
    ctx = context.WithValue(ctx, "mydata", data)
}
登录后复制

选项 3:混合解决方案

您还可以使用混合方法,您可以在其中创建一个包含键值对映射的包装器结构。然后,您可以将包装器结构体添加到上下文中:

type MyWrapper struct {
    m map[string]string
}

func (w *MyWrapper) Get(key string) string {
    return w.m[key]
}

func main() {
    // Create a context.
    ctx := context.Background()

    // Create a wrapper struct.
    wrapper := MyWrapper{
        m: map[string]string{
            "key1": "value1",
            "key2": "value2",
        },
    }

    // Add the wrapper struct to the context.
    ctx = context.WithValue(ctx, "mywrapper", wrapper)
}
登录后复制

结论

使用方法将取决于特定的用例和性能要求。如果您需要以最小的开销添加少量键值对,可以使用选项 1。如果考虑性能,您可能需要使用选项 2 或选项 3。

以上是如何在 Go 中将多个键值对传递到上下文?的详细内容。更多信息请关注PHP中文网其他相关文章!

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