在 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中文网其他相关文章!