Golang基础--context的用法
context包是go并发中常用的包,用于设置截至日期,同步信号,传递请求相关的值。
应用场景
每一个http请求的request都会启动一个goroutine处理这个请求,后续跟进的这个请求可能还需要访问数据库,做安全验证,访问控制,日志记录等,这时候就会
由最早的goroutine启动后续的多个goroutine,这样就会有多个goroutine处理一个request。而context的作用就是在这几个不同的goroutine之间同步特定数据,取消信
号,以及处理请求的截至日期。
定义
这里我列出了Context的接口代码,方便更加深入的讨论context的实现细节。
type Context struct{
Deadline() (deadtime time.Time,ok bool)
Done() <- chan struct{}
Err() error
Value(key interface{}) interface{}
}
- Deadline() :需要返回当前Context被取消的时间,也就是截止时间
- Done():需要返回一个channel,该channel会在工作完成或者Context被取消时关闭,多次调用Done()方法返回的是同一个channel
- Err():用于返回当前Context结束的原因
- Value():用于取得当前Context绑定的值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了