go进阶语法
2022-11-13 11:41:20 0 举报
AI智能生成
go进阶语法相关知识,持续更新...
作者其他创作
大纲/内容
WithWalue:设置键值对,并且返回一个新的context实例例子:链路追踪的trace idAB测试的标记位压力测试的标记位分库分表中间件传递sharding hintORM中间件传递SQL hintWeb框架传递上下文
安全传递数据
WithCancel:无确定过期时间,在需要的地方随时取消。为典型的装饰器模式,在Context的基础上加上取消的功能cancelCtx实现children:核心是子Ctx把自己添加进父Ctx的children字段里。本质上是找最近属于cancelCtx类型的祖先,然后子Ctx把自己添加进去cancel:遍历调用children的cancel,即关闭done的channel,符合谁创建谁关闭的原则
WithDealine:在固定时刻过期
WithTimeout:在一段时间后过期。源码调用WithDealline,传入time.Now().Add(超时时间)
用于控制链路:返回一个可以取消的context实例和取消函数 子Context无法重置时间
Deadline:返回过期时间,如果ok为false,说明没有设置过期时间
Done:返回一个channel,一般用于监听Context实例的信号,比如过期或者正常关闭
Err:返回Context发生的错误,Canceled=>正常关闭,DeadlineExceeded=>过期超时
Value:取值
核心API
典型的装饰器模式:在已有Context的基础上附加一个存储key-value的功能
只能存储一个key,val:为什么不用map?因为map要求key是comparable(可比较)的,而我们可能用不是comparable的keycontext的设计理念就是将Context设计成不可变的
valueCtx:用于存储key-value数据
select + time.After
time.AfterFunc
配合超时控制
配合errgroup
context包注意事项:一般只用于方法参数,且作为第一个参数除util、helper之类的方法外,都应该考虑加上context参数除结构体表达一个上下文的概念外(如web框架的context),最好不要放在结构体字段面试要点:使用场景 - 上下文传递和超市控制原理 - 父级如何控制子级:子级主动加入父级children字段,需要操作时父级遍历children即可原理 - valueCtx(k-v)和timeCtx(cancel+计时器)原理
sync包
channel编程
并发编程
进阶语法
0 条评论
下一页