通过Go代码构建的简单上下文树(包含一些可能在请求范围内包含并包含在上下文中的公共值),如下所示:
// 伪围棋 ctx := context.WithValue( context.WithDeadline( context.WithValue(context.Background(), sidKey, sid), time.Now().Add(30 * time.Minute), ), ridKey, rid, ) trCtx := trace.NewContext(ctx, tr) logCtx := myRequestLogging.NewContext(ctx, myRequestLogging.NewLogger())
是一棵可以表示为有向图的树,如下所示:
每个子上下文都可以访问其父上下文的值,因此数据访问在树中向上流动(由黑色边缘表示)。另一方面,取消信号沿树传播(如果取消了上下文,则其所有子级也会被取消)。抵消信号流由灰色边缘表示。