MST

星途 面试题库

面试题:Go中context如何在任务队列中传递上下文信息

请阐述在Go语言中,使用context管理任务队列上下文依赖时,如何将父上下文的信息传递给任务队列中的子任务,并且举例说明关键代码实现。
29.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,使用context管理任务队列上下文依赖时,传递父上下文信息给子任务可以通过context.WithValue函数实现。

  1. 传递信息的原理
    • context.WithValue函数用于创建一个携带额外信息的新上下文。这个函数接受一个父上下文和一对键值对作为参数,返回一个新的上下文。子任务可以通过ctx.Value(key)方法获取父上下文中传递的信息。
  2. 关键代码示例
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")获取父上下文传递的用户信息,并进行相应处理。