【Go context解惑】01 前世:没有 context 的世界,我们如何挣扎?

大家好,我是Tony Bai。

欢迎来到我的《Go context 解惑专栏》。

如果你和我一样,是一个 Go 开发者,那你一定对下面这行代码无比熟悉:

func HandleRequest(ctx context.Context, ...)

context.Context,这个神秘的类型,几乎无处不在。它像一个不成文的规定,总是作为函数的第一个参数出现,从 Web 框架的 Handler,到底层数据库的驱动调用,它的身影贯穿了整个 Go 应用的调用链。

我们每天都在用它,但你是否曾在夜深人静时扪心自问:

  • 这个 ctx 究竟是什么?

  • 为什么它必须是第一个参数?

  • 它到底解决了什么问题,以至于让 Go 核心团队不惜“污染”几乎所有关键函数的签名,也要强推这个规范?

市面上有很多文章会直接告诉你 context 的 API 用法:WithCancelWithTimeoutWithValue... 但这种“知其然,不知其所以然”的学习方式,往往会导致你在遇到复杂问题时,依然会用错、用滥,甚至引发更严重的 Bug。

所以,在这个专栏的开篇,我打算做一个大胆的尝试。今天,我们一个字都不提 context 包的用法。

相反,我邀请你和我一起坐上“时光机”,回到那个没有 context 包的“史前时代”。我们将亲手搭建一个简单的 Go 程序,然后一步步地为它增加真实世界的功能需求。在这个过程中,我们将遇到两个极其棘手且普遍的问题,并尝试用最“笨拙”的方式去解决它。

我们会挣扎,会写出丑陋的代码,会感到痛苦和无奈。但请相信我,只有深刻地体会过这种“痛苦”,你才能在下一讲我们揭开 context 神秘面纱时,发出那一声发自肺腑的“啊哈!原来如此!”

准备好了吗?让我们开始这场“挣扎”之旅。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值