Skip to content

Latest commit

 

History

History
28 lines (22 loc) · 747 Bytes

File metadata and controls

28 lines (22 loc) · 747 Bytes

context 的很重要的一个作用是在各个子 routine 之间传递一些共享值,例如用户的 id。

使用 context.WithValue 创建一个值节点,并把它们链接到树形结构中。

func main() {
	ctx := context.WithValue(context.Background(), "userid", "1234567")
}

只要能获取到该 ctx 的协程都可以获取到该值。

func Handler(ctx context.Context) {
	fmt.Println(ctx.Value("userid"))
	wg.Done()
}
func main() {
	ctx := context.WithValue(context.Background(), "userid", "1234567")
	wg.Add(1)
	go Handler(ctx)
	wg.Wait()
}

值得注意,如果 ctx 最终穿起来是一个树形结构。所以所有该 ctx 派生的 context 上执行 WithValue 都能获取到该值。 详细例子参见