Go 进阶 · 分布式爬虫实战
郑建勋
Go 语言技术专家,《Go 语言底层原理剖析》作者
15839 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 58 讲
Go 进阶 · 分布式爬虫实战
15
15
1.0x
00:00/00:00
登录|注册

22|优雅地离场: Context超时控制与原理

你好,我是郑建勋。
在 Go 语言的圈子里有一句名言:
Never start a goroutine without knowing how it will stop。
意思是,如果你不知道协程如何退出,就不要使用它。
如果想要正确并优雅地退出协程,首先必须正确理解和使用 Context 标准库。Context 是使用非常频繁的库,在实际的项目开发中,有大量第三方包的 API(例如 Redis Client、MongoDB Client、标准库中涉及到网络调用的 API)的第一个参数都是 Context。
// net/http
func (r *Request) WithContext(ctx context.Context) *Request
// sql
func (db *DB) BeginTx(ctx context.Context, opts *TxOptions) (*Tx, error)
// net
func (d *Dialer) DialContext(ctx context.Context, network, address string) (Conn, error)
那么 Context 的作用是什么?应该如何去使用它?Context 的最佳实践又是怎样的?让我们带着这些疑问开始这节课的学习。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了Go语言中的Context超时控制与原理。首先强调了正确理解和使用Context标准库的重要性,并解释了Context的作用和最佳实践。文章详细介绍了Context的四种方法:Deadline、Done、Err、Value,并举例说明了Context的使用方法和级联退出情况。此外,文章还介绍了context.Value的适用场景,并解释了Context的具体实现和派生函数的功能。通过示例代码展示了父Context的退出会导致所有子Context的退出,而子Context的退出并不会影响父Context。文章还介绍了Go网络标准库中对Context的使用,将Context的使用场景和最佳实践方式都梳理了一遍。最后,文章简单介绍了Context的底层原理,利用了通道的特性实现了继承链上退出信号的传递。整体而言,本文对于想要深入了解Go语言并发编程的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 进阶 · 分布式爬虫实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • Geek_7ba156
    老师课程后面会有websocket相关的爬虫设计吗?毕竟网站数据也不只是restfulapi,现在很多数据都是wss了。对于wss的控制,keepalive,我觉得也很需要了解,gorilla自带的keepalive不是特别好用,如果有比较好的项目也可推荐下
    2022-11-29归属地:江苏
    10
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部