为了账号安全,请及时绑定邮箱和手机立即绑定

新手上路,context包的withTimeout, withCancel之类的具体实用价值是啥各位有什么建议?

新手上路,context包的withTimeout, withCancel之类的具体实用价值是啥各位有什么建议?

SMILET 2019-10-16 16:54:27
父级context定义了context,传入到子级比如funca(){b,cancel:=context.WithTimeout(context.BackGround(),time.Second())cc(b)}funccc(ctxcontext.Context){select{case
查看完整描述

2 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

context的这个使用,在web编程里比较常见。
具体的一个应用:比如存在一个微服务集合,其中对外的一个api接口(假设为A)依赖其他几个微服务(假设为B和C)提供的服务;如果我们调用了A的接口,那么服务A会调用B和C的接口。如果这个时候我们调用A接口的动作终止了(比如我们主动放弃api的调用,但是这个时候A还在继续调用B和C,那么怎么通知A放弃对B和C的调用呢?这个时候context的一些特定就用上了。
再描述一个例子:web应用中会使用到数据库,启动web应用的时候会创建数据库的连接池,当我们的web应用退出(重启、升级)时,为了避免数据库连接泄露,应该提前把数据库的连接池释放掉,这个时候也可以通过context来传递信息。
                            
查看完整回答
反对 回复 2019-10-16
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

楼上答主描述的已经非常好了,但好像题主是不了解Context该怎么写。
之前我翻译过官方的一篇博文,context,如果想看看官方原文,文中有链接,文章中有个案例可以仔细阅读下。另外,如果对Go的并发不够了解,建议看看官方的另一篇文章,我的翻译。
context一般主要是用于服务类程序的编写,比如http服务,可以读读类似框架的源码。
                            
查看完整回答
反对 回复 2019-10-16
  • 2 回答
  • 0 关注
  • 850 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信