golang context 的一个小坑

原创
2019/11/12 17:55
阅读数 1.4K

项目最近几个版本开始使用 context 包,主要用于透传参数。由于不够熟悉 context,我在优化代码时遇到了这样的问题。

func main() {
	ctx := context.WithValue(context.Background(), true, 1)

	fun(ctx)

	log.Println(ctx.Value(true))
	// 1
}

func fun(ctx context.Context) {
	ctx = context.WithValue(ctx, true, 2)
}

在我的印象中,一个函数如果入口是 interface,那么实际的传参往往是指针。可是 context 包导出的函数全部是传值,而不是指针。这导致护照购买时购买失败。好在测试小姐姐及时发现了这个错误,没有酿成大错。

这个故事告诉我们,一定要在理解代码的基础上做优化,不然会成为负优化。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部