1 Star 0 Fork 0

xzplink / Go-Training

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
index.md 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 都能获取到该值。 详细例子参见

Go
1
https://gitee.com/xzplink/go-training.git
git@gitee.com:xzplink/go-training.git
xzplink
go-training
Go-Training
main

搜索帮助