面试题答案
一键面试在Go语言中,使用context
管理任务队列上下文依赖时,传递父上下文信息给子任务可以通过context.WithValue
函数实现。
- 传递信息的原理:
context.WithValue
函数用于创建一个携带额外信息的新上下文。这个函数接受一个父上下文和一对键值对作为参数,返回一个新的上下文。子任务可以通过ctx.Value(key)
方法获取父上下文中传递的信息。
- 关键代码示例:
package main
import (
"context"
"fmt"
)
func main() {
// 创建一个父上下文
parentCtx := context.Background()
// 使用WithValue传递信息,这里传递用户名
ctxWithValue := context.WithValue(parentCtx, "user", "John")
// 模拟任务队列中的子任务
go func(ctx context.Context) {
// 获取传递的信息
user, ok := ctx.Value("user").(string)
if ok {
fmt.Printf("子任务获取到的用户: %s\n", user)
} else {
fmt.Println("子任务未获取到用户信息")
}
}(ctxWithValue)
// 防止程序过早退出
select {}
}
在上述代码中:
- 首先创建了一个
context.Background
作为父上下文。 - 然后使用
context.WithValue
创建了一个携带用户信息的新上下文ctxWithValue
。 - 子任务函数从传入的上下文
ctx
中通过ctx.Value("user")
获取父上下文传递的用户信息,并进行相应处理。